본문 바로가기
Java

File 클래스

by Backchus 2019. 9. 17.

IO 패키지(java.io)에서 제공하는 File 클래스는 파일 크기, 파일 속성, 파일 이름 등의 정보를 얻어내는 기능과 파일 생성 및 삭제 기능을 제공하고 있습니다. 그러나 파일의 데이터를 읽고 쓰는 기능은 지원하지 않습니다. 파일의 입출력은 스트림을 사용해야 합니다. 

다음은 C:\Temp 디렉토리의 file.txt 파일을 File 객체로 생성하는 코드입니다.

1
2
File file = new File("C:\\Temp\\file.txt");
File file = new File("C:/Temp/file.txt");
 

File 객체를 생성했다고 해서 파일이나 디렉토리가 생성되는 것은 아닙니다. 생성자 매개값으로 주어진 경로가 유효하지 않더라도 컴파일 에러나 예외가 발생하지 않습니다.

 

File 객체를 통해 해당 경로에 실제로 파일이나 디렉토리가 있는지 확인하려면 exists() 메소드를 호출할 수 있습니다.

1
boolean isExist = file.exists();
 

파일이 파일 시스템에 존재하면 true를 리턴하고 존재하지 않는다면 false를 리턴합니다.

 

다음으로 주요 메서드를 살펴 보겠습니다.

리턴 타임 메소드 설명
boolean createNewFile() 새로운 파일을 생성
String getName() 파일의 이름을 리턴
String getParent() 부모 디렉토리를 리턴
`File getParentFile() 부모 디렉토리를 File 객체로 생성 후 리턴
String getPath() 전체 경로를 리턴
long length() 파일의 크기를 리턴
File[] listFiles() 디렉토리에 포함된 파일 및 서브 디렉터리 목록 중에 File 배열로 리턴

 

FileInputStream

FileInputStream 클래스는 파일로부터 바이트 단위로 읽어들일 때 사용하는 바이트 기반 입력 스트림입니다. 바이트 단위로 읽기 때문에 그림, 오디오, 비디오, 텍스트 파일 등 모든 종류의 파일을 읽을 수 있습니다.

1
2
3
4
FileInputStream fis = new FileInputStream("C:/Temp/image.gif");
 
File file = new File("C:/Temp/image.gif");
FileInputStream fis = new FileInputStream(file);
 

만약 파일이 존재하지 않으면 FileNotFoundException을 발생시키므로 try-catch문으로 예외 처리를 해야합니다.

 

FileInputStream은 InputStream의 하위 클래스이기 때문에 사용 방법이 InputStream과 동일 합니다.

1
2
3
4
5
6
7
FileInputStream fis = new FileInputStream("C:/Temp/image.gif");
int readByteNo;
byte[] readBytes = new byte[100];
while((readByteNo = fis.read(readBytes)) != -1){
   //읽은 바이트 배열(readBytes)을 처리
}
 
 

 

FileOutputStream

FileOutputStream은 바이트 단위로 데이터를 파일에 저장할 때 사용하는 바이트 기반 출력 스트림입니다.

1
2
3
4
FileOutputStream fos = new FileOutputStream("C:/Temp/image.gif");
 
File file = new File("C:/Temp/image.gif");
FileOutputStream fos = new FileOutputStream(file);
 

 

주의할 점은 파일이 이미 존재할 경우, 데이터를 출력하면 파일을 덮어쓰게 되므로, 기존의 파일 내용은 사라지게 됩니다. 기존의 파일 내용 끝에 데이터를 추가할 경우에는 FileOutputStream 생성자의 두 번째 매개값을 true로 주면 됩니다.

1
2
FileOutputStream fis = new FileOutputStream("C:/Temp/data.txt"true);
FileOutputStream fis = new FileOutputStream(file, true);
 

 

FileOutputStream은 OutputStream의 하위 클래스이기 때문에 사용 방법이 OutputStream과 동일합니다. 한 바이트를 저장하기 위해서 write() 메소드를 사용하고 바이트 배열을 한꺼번에 저장하기 위해서 write(byte[] b) 또는 write(byte[] b, int off, int len) 메소드를 사용합니다.

1
2
3
4
5
FileOutputStream fos = new FileOutputStream("C:/Temp/image.gif");
byte[] data = ...;
 
 

'Java' 카테고리의 다른 글

LocalDate, LocalTime  (0) 2019.08.23
스트림  (0) 2019.01.28
예외 발생 및 회피  (0) 2019.01.25
예외 클래스  (0) 2019.01.25
예외 처리  (0) 2019.01.25