파일은 기본적이면서도 가장 많이 사용되는 입출력 대상이다. 다양한 활용예제를 통해 익숙해지자.
자바에서는 File클래스를 통해 파일과 디렉토리를 다룬다. 메모리에 적재된 File인스턴스는 실제 파일일 수도 있고, 디렉토리일 수도 있다.
String타입의 경로, 파일 이름을 갖고 보조저장장치에 위치한 파일 객체를 생성할 수 있다. url로 파일을 생성할 수 있다. get메서드를 이용해 파일의 경로, 절대경로, 이름, 조상디렉토리, 정규경로등을 String으로 얻을 수도 있음.
절대경로와의 차이점은, 절대경로는 파일시스템의 루트에서 출발하는건 동일하지만, 어떻게든 도착만 하면 된다는 것이다. 그래서 한 파일의 절대경로는 여러개일 수 있다. 하지만 정규경로는 최단거리를 표현했기 때문에 한 파일은 오직 하나의 정규 경로만 갖는다.
윈도우에서는 이름 구분자로 \\
를 사용하고, 경로구분자로는 ;
를 사용한다.
OS에 독립적인 프로그램을 작성하려면 반드시 위의 멤버변수를 이용해서 파일의 경로를 표시해줘야 한다.
실습
import java.io.*;
public class File1 {
public static void main(String[] args) throws IOException {
File f = new File("C:\\\\WorkSpace_Java\\\\CH15\\\\bin\\\\test.txt");
String fileName = f.getName();
int pos = fileName.indexOf(".");
System.out.println("경로를 제외한 파일이름 - "+f.getName());
System.out.println("확장자를 제외한 파일이름 - "+fileName.substring(0,pos));
System.out.println("확장자 - " +fileName.substring(pos+1));
System.out.println("경로를 포함한 파일이름 -"+f.getPath());
System.out.println("파일의 절대경로 - "+f.getAbsolutePath());
System.out.println("파일의 정규경로 - "+f.getCanonicalPath());
System.out.println("파일이 속해 있는 디렉토리 - "+f.getParent());
System.out.println();
System.out.println("File.pathSeparator - "+File.pathSeparator);
System.out.println("File.pathSeparatorChar - "+File.pathSeparatorChar);
System.out.println("File.separator" +File.separator);
System.out.println("FIle.separatorChar" +File.separatorChar);
System.out.println();
System.out.println("user.dir ="+System.getProperty("user.dir"));
System.out.println("sun.boot.class.path = "+System.getProperty("sun.boot.class.path"));
}
}