Java

[JAVA] 파일 입출력

HSRyuuu 2023. 5. 19. 12:56

파일에 쓰기

1. FileWriter

fname으로 지정한 파일이 쓰기 모드로 열린다. 없으면 파일을 생성한다.

FileWriter(String fname, boolean append)

두 번째 파라미터로 이어 쓰기 옵션을 선택한다. default는 false이다.

append=true로 설정 시 파일에 남아있는 텍스트 뒤로 이어 쓴다.

fw.write(String str)

파일에 문자열을 입력한다.

fw.close()

FileWriter를 모두 사용한 뒤엔 꼭 close() 메서드로 닫아줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
FileWriter fw = new FileWriter(fname);

String memo = "hello world!!!\n";
fw.write(memo);

String memo2 = "hello java!";
fw.write(memo2);

fw.close();

주의! 

  • write 할 때마다 줄 바꿈이 되지 않는다. "\n"으로 직접 줄 바꿈을 해줘야 한다.
  • append=false(default) 일 때, 새로 실행할 때마다 처음부터 다시 쓴다. (파일에 남아있던 텍스트로부터 이어 쓰지 않는다.)

2. PrintWriter

pw.println() , pw.print()

System.out.println(), print()와 똑같다고 생각하면 된다.

FileWriter와 다르게 직접 줄 바꿈("\n")을 해주지 않고 println을 사용하면 된다.

pw.close()

마찬가지로 pw도 꼭 close()를 해줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
PrintWriter pw = new PrintWriter(fname);

String memo = "hello world!!!";
pw.println(memo);

String memo2 = "hello java!";
pw.print(memo2);

pw.close();

3. BufferedWriter

BufferedWriter로 파일에 쓸 경우 생성할 때 FileWriter를 생성해서 파라미터로 넘겨줘야 한다.

bw.write(String str)

파일에 문자열을 입력한다.

bw.close()

꼭 close() 메서드로 닫아줘야 한다.

String fname = "./src/file/memofile.txt"; //상대경로
BufferedWriter bw = new BufferedWriter(new FileWriter(fname));

String memo = "hello world!!!";
bw.write(memo);

bw.close();

4. 파일 이어 쓰기

FileWriter

FileWriter fw = new FileWriter(fname,true);

FileWriter(String fname, boolean append)

두 번째 파라미터로 이어 쓰기 옵션을 선택한다. default는 false이다.

append=true로 설정 시 파일에 남아있는 텍스트 뒤로 이어 쓴다.

PrintWriter

PrintWriter pw = new PrintWriter(new FileWriter(fname,true));

BufferedWriter

BufferedWriter bw = new BufferedWriter(new FileWriter(fname,true));

PrintWriter, BufferedWriter의 경우 생성할 때 파라미터로 FileWriter(fname, true)를 넘겨주어야 한다.

주의!
세 가지 경우 모두 파일의 마지막 커서로 부터 이어 쓰기 때문에, 이전에 파일을 작성할 때 마지막에 줄 바꿈을 하지 않았다면, 줄바꿈을 하지 않은 채 그대로 이어 쓴다.

파일 읽기

FileReader

FileReader 클래스로 파일을 찾아서 열 수 있다.

문자 단위로 2byte씩 읽는다.

String fname = "./src/file/memofile.txt"; //상대경로
FileReader fReader = new FileReader(fname);

BufferedReader

BufferedReader로 FileReader를 파라미터로 받아서 생성하면 해당 파일로부터 데이터를 읽어 들인다.

br.readLine()

콘솔 입력을 읽어 들일 때와 마찬가지로 br.readLine() 메서드를 이용한다.

BufferedReader br = new BufferedReader(new FileReader(fname));//파일 입력
//콘솔 입력 BufferedReader br = new BufferedReader(new InputStreamReader((System.in)));

다음 Line을 읽었을 때 null이라면 파일의 끝이므로 while문을 종료한다.

// 파일의 끝(EOF)이라면 null을 반환
while ((str = bReader.readLine()) != null) {
   System.out.println(str);
}

Scanner

sc.hasNextLine() 으로 다음줄이 존재하지 않으면 while문을 종료하는 방식으로 읽을 수 있다.

나머지는 콘솔 입출력과 똑같이 동작한다.

String fname = "./src/file/memofile.txt"; //상대경로
Scanner sc = new Scanner(new File(fname));
while(sc.hasNextLine()){
    //코드
}
sc.close();

예제

in.txt

in.txt 파일에 아래와 같은 데이터가 저장되어 있다.

hello world!!
Hi~Java~
HSRYUUU

이 데이터를 한 줄씩 읽어서 out.txt 파일에 거꾸로(뒤집어서) 출력해 보자.

Code

String f_in = "./src/file/in.txt"; //상대경로
String f_out = "./src/file/out.txt"; //상대경로

BufferedReader br = new BufferedReader(new FileReader(f_in));//f_in 파일에서 읽는다.
PrintWriter pw = new PrintWriter(f_out);//f_out 파일에 쓴다.

String str = "";
while((str = br.readLine())!=null){
    StringBuilder sb = new StringBuilder(str);
    sb.reverse();
    pw.println(sb);
}

pw.close();
br.close();

결과(out.txt)

!!dlrow olleh
~avaJ~iH
UUUYRSH
반응형