[네트워크 프로그래밍1]파일 처리 클래스 정리

류명운

·

2015. 4. 14. 14:51

반응형

 FileInputStream 및 FileOutputStream 특정한 파일과 연결된 스트림 객체를 생성하여 순차적으로 파일에 데이터를 저장하고 읽을 수 있는 기능을 수행한다. 반면에 File 클래스는 지정한 파일에 대한 정보 및 처리를 하는 기능을 수행하며 RandomAccessFile 클래스는 파일의 임의의 위치에 대한 접근을 구현하는 기능을 수행한다.


1. File 클래스

->파일과 디렉터리를 다룰 수 있다. 그래서 File 인스턴스는 파일이나 디렉터리이다.

->자바가상시계가 알아서 처리를 해준다.

->파일 내용을 읽거나 쓸 수 있는 기능은 제공하지 않는다.

다음과 같은 생성자를 갖고있다.

 File 클래스의 생성자

 설명

 File(String dir)

 dir에 해당하는 파일의 File객체를 생성한다

 File(String dir, String filename)

 dir폴더 경로의 filename이라는 파일의 File객체를 생성한다

 File(File f, String filename)

 f라는 객체 폴더의 fiename이라는 파일의 File객체를 생성한다

* 생성자에서는 예외를 발생시키지 않는다. 즉, 생성자 메소드는 인수로 주어진 파일 객체를 생성할 때 파일이 실제로 존재하는지에 대한 여부, 또는 파일이름이 유효한 지에 대한 것조차 체크를 하지 않는다.

다음과 같은 메소드를 갖고있다.

File 클래스의 메소드 

설명 

boolean exists() 

호출한 File 객체가 파일 시스템에 존재하면 true, 아니면 false를 반환 

boolean isFile() 

호출한 객체가 파일이면 true, 아니면 false 

boolean isDirectory() 

호출한 객체가 폴더이면 true, 아니면 false 

String getName()

호출한 파일객체에서 파일이름만 반환 

String getPath() 

호출한 파일객체가 가리키는 경로와 파일이름을 함께 반환 

String getAbsolutePath() 

절대 경로 반환 

String getCanonicalPath() throws IOException 

상대경로를 반환 

boolean isAbsolute() 

절대 경로이면 true, 아니면 false 

String getParent() 

path 필드 안에 있는 파일이름을 제외한 폴더이름 

boolean canRead() 

File 객체가 가리키는 파일이 읽기 가능하면 true, 아니면 false 

boolean canWrite() 

File 객체가 가리키는 파일이 쓰기 가능하면 true, 아니면 false 

boolean isHidden() 

파일이 존재하고 숨김 파일이라면 true, 아니면 false 

long lastModified() 

파일이 1970년 1월 1일부터 마지막으로 수정된 날짜까지의 시간을 밀리초로 반환 

long length() 

파일의 크기를 반환, 존재하지 않으면 0 

boolean createNewFile() throws IOException 

파일을 생성, 생성되면 true 아니면 false 

boolean renameTo(File new) 

호출한 파일 객체의 이름을 인수로 주어진 new 이름으로 변경 

boolean delete() 

호출한 파일 객체의 이름을 파일 시스템으로부터 삭제하고 true를 반환, 아니면 false를 반환(파일을 포함하지 않는 폴더만 삭제 가능) 

boolean equals(Object obj)

호출한 객체와 인수로 주어진 obj로 지정된 객체가 같은 파일을 가리키면 true, 아니면 false 

String toString() 

객체가 가리키는 문자열을 반환 

boolean mkdir()

호출한 객체의 path 필드에 설정된 폴더를 생성, 성공하면 true, 아니면 false(하나의 폴더만 생성가능) 

boolean mkdirs()

mkdir()와 달리 하나의 폴더가 아니라, 호출한 객체가 지정한 모든 폴더를 생성 

String[] list()

호출한 File 객체가 가리키는 폴더에 포함된 모든 파일이름을 포함하는 문자열 배열을 반환 

간단한 사용법을 알아보겠다.

File name = new File(test); //test 파일 객체를 생성한다

if(name.exists()){ //name 파일 객체가 파일시스템에 존재하면

 System.out.println(name.getName()); //name 파일 객체 안에 이름을 반환

 System.out.pritnln(name.isFile()); // 파일이면 true를 반환

 System.out.println(name.isAbsolute()); //절대경로이면 true를 반환

}

1. 이미 존재하는 파일을 참조할 때

  File f = new File("c:\\jdk\\work\\ch14", "File1.java");

2. 기존에는 없는 파일을 새로 생성할 때

  File f = new File("c:\\jdk\\work\\ch14", "File2.java");

  f. createNewFile(); //새로운 파일이 생성된다.

3. 폴더만들기

  File f = new File("aaa");

  f.mkdir();

4. 복수의 폴더만들기

  File ff = new File("bbb\ccc\ddd");

  ff.mkdirs();


2. RandomAccessFile 클래스

->파일의 중간이나 끝에 있는 데이터를 먼저 읽을 필요가 있을 경우 효율적으로 사용한다.

->File 클래스와 달리 데이터를 읽거나, 읽기 쓰기 모두를 할 수 있다.

->레코드 단위로 저장된 파일에 접근할 때 유용하다.

다음과 같은 생성자를 갖고 있다.

 RandomAccessFile 생성자

 설명

 RandomAccessFile(String name, String mode) throws FileNotFoundException

 첫 번째 인수 name은 폴더 및 파일이름으로 구성하며, 두 번째 인수 mode는 읽기 모드를 가리키는 "r" 또는 읽기/쓰기 모드를 가리키는 "rw"가 사용된다. 

 RandomAccessFile(File file, String mode) throws IOException

 첫 번째 인수로 FIle 객체를 사용하여 파일을 지정하는 것만 다르고 위 생성자와 같다.

앞서 말했듯이, File 클래스는 특정한 파일에 대한 정보를 제공하고 처리하는 기능들을 제공할 뿐, 파일에 데이터를 전송하거나 읽는 기능을 제공하지 않는다.

하지만, RandomAccessFile 클래스는 지정된 파일에 데이터를 쓰거나 읽는 기능을 제공한다.

RandomAccessFile 클래스는 DataOutputStream 및 DataInputStream의 하위 클래스이므로 이들 클래스에서 지원하는 write(int b), writeInt(int i), writeUTF(String s), read(), readInt(), readUTF() 및 readLine() 등과 같은 메소드를 그대로 사용하여 파일에 데이터를 쓰거나 읽을 수 있다. 추가로 임의의 접근 방식을 구현하기 위해서 지원하는 메소드는 아래와 같다.

 RandomAccessFile 메소드

 설명

 native long getFilePointer() throws IOException

 읽기와 쓰기가 발생하는 파일에서 파일 포인터의 현재 위치를 반환(파일 포인터는 현재 읽거나 쓰는 파일내의 위치를 의미)

 native void seek(long pos) throws IOException 

 파일의 처음 위치(0)으로부터 pos로 지정한 위치로 파일 포인터를 이동 

 int skipBytes(int n) throws IOException

 파일의 현재 위치부터 n 바이트만큼 파일 포인터를 위치시키고 실제로 스킵한 수를 반환한다

 nativ long length() throws IOException 

 파일의 길이를 반환한다 

 native close() throws IOException

 파일을 닫는다


3. FileDescriptor 클래스

->자바는 열려진 모든 파일에 대한 FileDescriptor 객체를 생성한다.

->하나의 파일이 2개 열린 경우 각각의 FileDescriptor를 갖게 된다.


연습문제 p.69

1. 예제 3.1을 명령어 모드에서 실행되는 클래스로 수정하시오. 파일 이름은 클래스를 실행할 때 인수로 입력받는다.

2. RandomAccessFile 클래스를 이용하여 파일의 내용을 읽어서 화면에 출력하는 프로그램을 작성하시오(readLine() 메소드로 읽음). 파일 이름은 클래스를 실행할 때 인수로 입력받는다.

3. 예제 3.2에 의하여 저장된 파일을 Record 클래스의 read() 메소드를 이용하여 한 레코드씩 읽어서 해당하는 텍스트 필드에 출력하는 클래스를 작성하시오.


반응형