파일에 쓰기
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
'JAVA & Spring' 카테고리의 다른 글
[JAVA] format() 메서드 : 문자열 포맷 지정 / printf() (0) | 2023.06.01 |
---|---|
[JAVA] 람다식과 스트림 Stream() (0) | 2023.05.25 |
[Java] StringTokenizer (0) | 2023.05.04 |
[Java] Optional<T> 클래스 (0) | 2023.05.03 |
[Java] String 클래스, 관련 메소드 (0) | 2023.04.20 |