- 자바 파일 쓰기에 대해 파헤치기
이번에는 파일 쓰기를 파헤쳐볼 예정이다.
이번에 만날 친구들은 FileOutputStream, FileWriter, PrintWriter이다.
1. FileOutputStream
아래의 예제를 실행하면 d:/ 디렉터리 바로 밑에 out.txt라는 파일이 생성된다.
import java.io.FileOutputStream;
import java.io.IOException;
public class Sample {
public static void main(String[] args) throws IOException {
FileOutputStream output = new FileOutputStream("d:/out.txt");
output.close();
}
}
FileOutputStream 클래스를 사용하면 위처럼 파일을 생성할 수 있다.
(FileOutputStream 클래스는 객체를 생성할 때 생성자 입력으로 파일명을 넘겨주어야 한다.)
이번에는 생성한 파일에 내용을 입력해볼 것이다.
import java.io.FileOutputStream;
import java.io.IOException;
public class Sample {
public static void main(String[] args) throws IOException {
FileOutputStream output = new FileOutputStream("d:/out.txt");
for(int i = 1 ; i < 11 ; i++) {
String data = i + " 번째 줄입니다.\n\r";
output.write(data.getBytes());
}
output.close();
}
}
InputStream과 마찬가지로 OutputStream 역시 byte 단위로 데이터를 처리하는 클래스이다.
FileOutputStream은 OutputStream 클래스를 상속받아 만들어졌기에 byte 단위로 데이터를 처리한다.
이로 인해 String을 byte 배열로 바꾸어 주는 getBytes() 메서드를 이용하였다.
2. FileWriter
InputStream 때처럼 byte 단위로 데이터를 처리하는 건 매우 불편하다.
FileWriter를 사용하면 String을 byte 배열로 변환하지 않아도 된다.
import java.io.FileWriter;
import java.io.IOException;
public class Sample {
public static void main(String[] args) throws IOException {
FileWriter fw = new FileWriter("d:/out.txt");
for(int i = 1 ; i < 11 ; i++) {
String data = i + " 번째 줄입니다.\n\r";
fw.write(data);
}
fw.close();
}
}
3. PrintWriter
FileWriter를 사용하더라도 문자열 뒤에 개행문자 '\r\n'을 덧붙여야 한다.
PrintWriter를 사용하면 '\r\n'을 덧붙이는 대신 println이라는 메서드를 사용할 수 있다.
import java.io.IOException;
import java.io.PrintWriter;
public class Sample {
public static void main(String[] args) throws IOException {
PrintWriter pw = new PrintWriter("d:/out.txt");
for(int i = 1 ; i < 11 ; i++) {
String data = i + " 번째 줄입니다.";
pw.println(data);
}
pw.close();
}
}
참고문헌 : 박응용(2023), Do it! 점프 투 자바, 이지스퍼블리싱