반응형
FileReader/Writer 사용 예제
💻 예제
📝 소스 코드
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
public class Main {
private static final String BIG_TEXT = "temp/big_eng.txt";
public static void main(String[] args) {
System.out.println("FileReader / FileWriter\n");
FileWriter fw = null;
FileReader fr = null;
BufferedReader br = null;
BufferedWriter bw = null;
int charRead = 0;
int chars = 0;
long startTime, endTime, elapsedTime;
try {
System.out.println("FileReader/Writer 만 사용");
fr = new FileReader(BIG_TEXT);
fw = new FileWriter("temp.big_eng_copy1.txt");
startTime = System.currentTimeMillis();
while((charRead = fr.read()) != -1) {
fw.write(charRead);
chars++;
}
fw.flush();
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime; // 경과 시간
System.out.println("읽고 쓴 문자 수 : " + chars);
System.out.println("경과 시간(ms) : " + elapsedTime);
fw.close();
fr.close();
System.out.println();
System.out.println("BufferedReader/Writer + 버퍼 사용");
fr = new FileReader(BIG_TEXT);
fw = new FileWriter("temp/big_eng_copy2.txt");
br = new BufferedReader(fr);
bw = new BufferedWriter(fw);
char[] buf = new char[1024];
int charsRead = 0;
chars = 0;
startTime = System.currentTimeMillis();
while((charsRead = br.read(buf)) != -1) {
bw.write(buf, 0, charsRead);
chars += charsRead;
}
bw.flush();
endTime = System.currentTimeMillis();
elapsedTime = endTime - startTime;
System.out.println("읽고 쓴 문자 수 : " + chars);
System.out.println("경과 시간(ms) : " + elapsedTime);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null)
br.close();
if (bw != null)
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
FileWriter로 파일을 다 읽고 난 뒤엔 flush()를 해줘야 버퍼가 깔끔하게 비워지게 된다.
FileReader와 FileWriter는 사용하고 난 뒤 close()를 꼭 해주어야 한다.
Scanner를 사용하고 난 뒤 close()를 해주는 것과 같은 개념이다.
파일을 읽을 때 while문의 조건 (charRead = fr.read()) != -1 은 아래와 같은 내용으로 풀어쓸 수 있다.
while (true) {
charRead = fr.read();
if (charRead == -1)
break;
chars++;
}
📄 실행 결과
.txt 파일 한글 깨지는 것 고치기
txt 파일을 이클립스 내에서 볼 때 한글이 깨지는 경우가 있다. 이럴 때는 해당 파일이 utf-8로 인코딩 되어 있는데, 인코딩을 euc-kr로 바꿔주어야 한글이 깨지지 않고 txt 파일을 읽을 수 있다.
한글로 작성되어 있고, 인코딩이 현재 UTF-8로 되어 있어 깨지는 현상을 볼 수 있다.
인코딩을 변경하려는 txt 파일을 오른쪽 클릭한 뒤 Properties를 클릭한다.
아래와 같은 창이 뜰 것이다.
하단의 Text file encoding - Other에서 euc-kr를 직접 작성해준다.
적용을 한 뒤 파일을 확인해보면 한글이 깨지지 않고 잘 나타나는 것을 볼 수 있다.
반응형