● 파일 입출력
- java → 파일 : 출력
- 파일 → java : 입력
● Stream
- 데이터가 전송되는 통로
● 파일 입출력 순서
0. 파일 객체 만들기
1. 파일 데이터가 전송될 수 있도록 Stream 열어주기
1-2. 버퍼 생성하기
2. 파일을 읽거나 쓰기
3-0. 버퍼 닫기
3. Stream 닫기
● 인코딩 방식 설정하기
1. 프로젝트 별 인코딩 방식 설정하기
(1) 인코딩 방식을 설정하려는 프로젝트를 우클릭 후 Properties 클릭
(2) Properties 팝업창 좌측의 Resource 클릭
(3) Text file encoding의 other 선택 후 UTF-8 설정하여 Apply
2. 모든 워크스페이스에 동일한 인코딩 방식 설정하기
(1) 상단의 Window > Preferences 클릭
(2) Preferences 팝업창 좌측에서 General > workspace 클릭
(3) Text file encoding의 other 선택 후 UTF-8 설정하여 Apply
● File 클래스
- File 객체를 만드는데 사용하는 클래스
- 생성자의 매개변수로는 내가 사용할 파일 경로를 알려준다.
● FileWriter
- Stream을 여는데 사용하는 클래스
- 생성자의 매개변수로는 File 객체를 알려준다.
● BufferedWriter
- 버퍼를 생성하는데 사용하는 클래스
- 생성자의 매개변수로는 FileWriter 객체를 알려준다.
※ write()
- 문자열 값을 파일에 출력한다.
- 줄바꿈을 포함하지 않는다.
실습(파일 입력(1))
0. 파일 객체 만들기
File f = new File("test.txt");
FileWriter fw = null;
BufferedWriter bw = null;
1. 파일 데이터가 전송될 수 있도록 Stream 열어주기
fw = new FileWriter(f, true);
1-2. 버퍼 생성하기
bw = new BufferedWriter(fw);
2. 파일 쓰기
// bw.write("상대경로를 활용하여 문자열을 작성해 보았습니다.\n");
bw.write("새로운 한 줄 추가\n");
3-0. 버퍼 닫기
if(bw != null) bw.close();
3. Stream 닫기
if(fw != null) fw.close();
※ 전체 코드
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriteTest {
public static void main(String[] args) {
// 0. 파일 객체 만들기
File f = new File("test.txt");
FileWriter fw = null;
BufferedWriter bw = null;
try {
// 1. 파일 데이터가 전송될 수 있도록 Stream 열어주기
// true 값을 주면 덧붙이기가 된다(기존 내용 유지 + 새로운 내용 추가)
// false나 생략을 하면 덮어쓰기가 된다(기존 내용 X, 새로운 내용 덮어쓰기)
fw = new FileWriter(f, true);
// 1-2. 버퍼 생성하기
bw = new BufferedWriter(fw);
// 2. 파일 쓰기
// bw.write("상대경로를 활용하여 문자열을 작성해 보았습니다.\n");
bw.write("새로운 한 줄 추가\n");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 3-0. 버퍼 닫기
if(bw != null) bw.close();
// 3. Stream 닫기
if(fw != null) fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

실습(파일 입력(2))
- 프로젝트 폴더에 task.txt 파일을 생성하여 아래 내용 출력하기
// 0번째 줄입니다
// 1번째 줄입니다
// 2번째 줄입니다
// ...
// 9번째 줄입니다
0. 파일 객체 만들기
File f = new File("task.txt");
FileWriter fw = null;
BufferedWriter bw = null;
1. 파일 데이터가 전송될 수 있도록 Stream 열어주기
fw = new FileWriter(f);
1-2. 버퍼 생성하기
bw = new BufferedWriter(fw);
2. 반복문을 이용하여 파일 내용 쓰기
for (int i = 0; i < 10; i++) {
bw.write(i + "번째 줄입니다\n");
}
3-0. 버퍼 닫기
if(bw != null) bw.close();
3. Stream 닫기
if(fw != null) fw.close();
※ 전체 코드
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterTask {
public static void main(String[] args) {
// 파일 객체 만들기
File f = new File("task.txt");
FileWriter fw = null;
BufferedWriter bw = null;
try {
// 스트림 열기
fw = new FileWriter(f);
// 버퍼 생성하기
bw = new BufferedWriter(fw);
// 반복문 출력하기
for (int i = 0; i < 10; i++) {
bw.write(i + "번째 줄입니다\n");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
// 3-0. 버퍼 닫기
if(bw != null) bw.close();
// 3. Stream 닫기
if(fw != null) fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
