Java에서 파일을 읽어와 처리를 해야 하는 경우가 있습니다.
이러한 처리를 할 수 있도록 Java에 클래스가 이미 준비되어 있습니다.
- FileReader
- FileInputStream
FileReader와 FileInputStream 클래스를 사용해 파일을 읽어오는 방법을 알아보도록 하겠습니다.
FileReader
파일을 읽는 기본적인 방법으로 FileReder클래스가 있습니다.
File file = new File(“파일 이름”);
FileReader filereader = new FileReader(file);
File클래스 객체 생성시에 생성자의 인수에 읽어올 파일 이름을 지정합니다.
그다음에 FileReader클래스 객체 생성 시에 생성자의 인수에 File클래스 객체를 지정합니다.
이로써 FileReader클래스는 File클래스 객체를 인수로 지정한 객체를 생성하면서 파일 읽기 준비가 완료됩니다.
파일을 읽어올 때 주의점으로서 지정한 파일이 존재하지 않은 경우 FileNotFoundException의 에러가 발생합니다.
에러가 발생하지 않도록 File클래스의 exists메서드를 사용해 파일이 존재하는지 확인 후 하는 것이 좋습니다.
샘플을 보면서 사용방법을 확인해보겠습니다.
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try {
// File클래스에 읽어올 파일을 지정
File file = new File("/temp/java/java.txt");
// 파일이 존재하는지 체크
if(file.exists()) {
// FileReader클래스 오브젝트 생성
FileReader filereader = new FileReader(file);
// filereader 클래스의 read 메서드를 사용해 파일에서 한글자씩 읽어옴
int data;
while((data = filereader.read()) != -1) {
System.out.print((char) data);
}
//ファイルクローズ
filereader.close();
// 파일이 존재하지 않는 경우
} else {
System.out.print("파일이 존재하지 않습니다.");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
샘플 소스에서는 텍스트 파일을 읽어오고 있습니다.
지정한 폴더에 지정한 텍스트 파일이 존재하는지 미리 체크를 하고 있습니다.
파일이 존재하면 filereader클래스를 사용하여 파일을 한 글자씩 읽어오고 있습니다.
파일을 한 줄씩 읽어오기 위해서는 BufferedReader클래스의 readLine메서드를 사용합니다.
BufferedReader 자세한 사용 방법은 아래를 참조해주세요.
FileInputStream
FileInputStream클래스는 파일 읽기, 쓰기, 파일 생성등 다양한 파일 조작할 수 있는 클래스입니다.
FileInputStream fs = new FileInputStream(“파일 이름”);
FileInputStream클래스는 객체 생성시에 생성자 인수에 파일 이름을 지정합니다.
FileInputStream클래스를 사용해 파일을 읽어오는 경우에는 바이트 단위로 데이터를 읽어옵니다.
샘플을 보면서 사용방법을 알아보겠습니다.
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) {
try {
// 읽어올 파일을 지정
FileInputStream fs = new FileInputStream("/temp/java/java.txt");
InputStreamReader isr = new InputStreamReader(fs, "UTF-8");
//InputStreamReader클래스 read메서드로 파일을 한글자씩 읽어오기
int data;
while((data = isr.read()) != -1) {
System.out.println(data);
}
isr.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
read메서드를 사용해 파일에서 1바이트씩 읽어오고 있습니다.
while 반복문에서는 파일의 마지막까지 도착한 경우 반복문을 종료하도록 -1과 같은지 비교하고 있습니다.
이유는 파일의 끝에 해당하는 경우에 -1을 반환값으로 돌려주기 때문입니다.
위 샘플에서는 바이트 형식으로 한 글자씩 읽어와 출력하고 있습니다.
만약 문자열 형태로 출력하고 싶은 경우에는 아래처럼 형변환을 해줘야 합니다.
System.out.println((char) data);
char 형으로 변환을 해 출력을 해보면 문자열이 표시되는 것을 확인할 수 있습니다.
댓글