자바

18.4.1 File 클래스

IO 패키지(java.io)에서 제공하는 File 클래스는 파일 크기, 파일 속성, 파일 이름 등의 정보를 얻어내는 기능과 파일 생성 및 삭제 기능을 제공하고 있다.

그리고 디렉토리를 생성하고 디렉토리에 존재하는 파일 리스트를 얻어내는 기능도 있다. 그러나 파일의 데이터를 읽고 쓰는 기능은 지원하지 않는다. 

파일의 입출력은 스트림을 사용해야 한다. 다음은 c:\Temp 디렉토리의 file.txt 파일을 File 객체로 생성하는 코드이다.

 

18.4.4 FileReader

FileReader 클래스는 텍스트 파일을 프로그램으로 읽어들일 때 사용하는 문자 기반 스트림이다. 문자 단위로 읽기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 파일은 읽을 수 없다. 다음은 FileReader 를 생성하는 두 가지 방법을 보여준다. 첫 번째 방법은 전체 파일의 경로를 가지고 FileReader 를 생성하는 두 가지 방법을 보여준다. 첫 번째 방법은 전체 파일의 경로를 가지고 FileReader를 생성하는 두 가지 방법을 보여준다. 첫 번째 방법은 전체 파일의 경로를 가지고 FileReader 를 생성하지만, 읽어야 할 파일의 File 객체로 이미 생성되어 있다면 두 번째 방법으로 좀 더 쉽게 FileReader를 생성할 수 있다.

//방법1

FileReader fr =new FileReader("C://Temp//file.txt");

// 방법 2

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

FileReader fr =new FileReader(file);

FileReader 객체가 생성될 때 파일과 직접 연결이 되는데, 만약 파일이 존재하지 않으면 FileNotFoundException 을 발생시키므로 try-catch 문으로 예외 처리를 해야 한다. FileReader 는 Reader 의 하위 클래스이기 때문에 사용 방법이 Reader 와 동일하다. 한 문자를 읽기 위해서 read() 메소드를 사용하거나, 읽은 문자를 char 배열에 저장하기 위해서 read(char[] cbuf) 또는 read(char[] cbuf, int off, int len) 메소드를 사용한다. 전체 파일의 내용을 읽기 위해서는 이 메소들을 실행해서 -1이 나올 때까지 읽으면 된다.

 

FileReader fr =new FileReader("C://Temp//file.txt");

int readCharNo;

char[] cbuf =new char[100];

while((readCharNo =fr.read(cbuf)) !=-1){

 // 읽은 문자 배열(cbuf) 를 처리

}

fr.close();

 

파일의 내용르 모두 읽은 후에는 close() 메소드를 호출해서 파일을 닫아준다. 다음은 FileReader Example.java 소스 파일을 읽고 콘솔에 출력하는 예제이다.

 

public class FileReaderExample {

	public static void main(String[] args) throws Exception{
		
		FileReader fr =new FileReader("C:\\javawork\\java의정석\\ThisIsJava\\Chap06\\src\\ch26\\FileExample.java");
		
		int readCharNo;
		char[] cbuf =new char[100];
		while((readCharNo =fr.read(cbuf)) !=-1){
			String data =new String (cbuf, 0, readCharNo);
			System.out.println(data);
		}
		fr.close();
	}	
}

10라인에서 cbuf 배열에 저장되어 있는 문자들을 연결해서 문자열(String 객체) 로 생성하였다. String 생성자의 첫 번째 매개값에는 cbuf를 , 두 번째 매개값은 0 인덱스를 , 세 번째 매개값은 읽은 문자 수를 지정했다

 

18.4.5 FileWriter

FileWriter 는 텍스트 데이터를 파일에 저장할 때 사용하는 문자 기반 스트림이다. 문자 단위로 저장하기 때문에 텍스트가 아닌 그림, 오디오, 비디오 등의 데이터를 파일로 저장할 수 없다. 다음은 FileWriter 를 생성하는 두 가지 방법을 보여준다. 첫 번째 방법은 전체 파일의 경로를 가지고 FileWriter을 생성하지만, 저장할 파일이 File 객체로 이미 생성되어 있다면 두 번째 방법으로 좀 더 쉽게  FileWriter 를 생성할 수 있다.

 

//방법1

FileWriter fw =new FileWriter("C://Temp//file.txt");

//방법2

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

FireWriter fw =new FileWriter(file);

위와 같이 FileWriter 를 생성하면 지정된 파일이 이미 존재할 경우 그 파일을 덮어쓰게 되므로, 기존의 파일 내용은 사라지게 된다. 기존의 파일 내용

끝에 데이터를 추가할 경우에는 FileWriter 생성자에 두 번째 매개값으로 true를 주면 된다.

 

FileWriter fw =new FileWriter("C://Temp//file.txt", true);

FileWriter fw =new FileWriter(file, true);

 

FileWriter 는 Writer 의 하위 클래스이기 때문에 사용 방법이 Writer 와 동일하다. 한 문자를 저장하기 위해서 write() 메소드를 사용하고 문자열을 저장하기 위해서 write(String str) 메소드를 사용한다.

FileWriter fw =new FileWriter("C://Temp//file.txt");

String data ="저장할 문자열";

fw.write(data);

fw.flush();

fw.close();

 

write() 메소드를 호출한 이후에 flush() 메소드로 출력 버퍼에 있는 데이터를 파일로 완전히 출력하도록 하고, close() 메소드를 호출해서 파일을 닫아준다. 다음 예제는 문자열 데이터를 C:\Temp\File.txt 파일에 저장한다.

 

public class FileWriterExample {
	public static void main(String[] args) throws Exception{
		
		File file =new File("C://Temp//file.txt");
		FileWriter fw =new FileWriter(file, true);
		fw.write("FileWriter 는  한글로된 " + "\r\n");
		fw.write("문자열을 바로 출력할 수 있다" + "\r\n");
		fw.flush();
		fw.close();
		System.out.println("파일에 저장되었습니다.");
		
	}
}

 

about author

PHRASE

Level 60  머나먼나라

Nurture passes [is above] nature. (가문보다 가정 교육. (선천성 보다 후천성이 더 중요하다).

댓글 ( 4)

댓글 남기기

작성

자바 목록    more