Java 1.0 부터 있던 java.io.File
과 Java 7 부터 도입된 NIO2
두 개의 API가 존재한다.
파일 경로를 지정하여 인스턴스를 생성한다. 파일이나 디렉터리 조작을 위한 다양한 메서드가 있다.
// 절대 경로
File file1 = new File("C:\\Users\\minsoo\\workspace\\abc.txt");
// 현재 디렉토리 기준
File file2 = new File("abc.txt");
File file3 = new File("..\\workspace\\abc.txt");
// 부모 디렉터리와 짬뽕
File parent = new File("C:\\Users\\minsoo");
File file4 = new File(parent, "workspace\\abc.txt");
// 디렉토리 생성
File dir = new File("dir");
dir.mkdir();
// 파일 생성
File file = new File(dir, "test.txt");
file.createNewFile();
경로 구분 문자는 윈도우즈의 경우 "\", 유닉스 계열은 "/"을 사용한다. 따라서 경로를 하드 코딩하지 않기위해 File.separator 속성을 사용한다.
String sep = File.separator;
NIO2에서는 java.nio.file.Path
로 경로를 나타낸다. Path 객체의 생성은 java.nio.file.FileSystem
의 getPath()
메서드를 사용한다.
// 파일 시스템 구하기
FileSystem fs = FileSystems.getDefault();
// 절대 경로
Path path1 = fs.getPath("C:\\Users\\minsoo\\workspace\\abc.txt");
// 경로 구분 문자 없이
Path path2 = fs.getPath("C:", "Users", "minsoo", workspace", "abc.txt");
// 현재 디렉토리 기준
Path path3 = fs.getPath("dir", "test.txt");
// java.nio.file.Paths로 Path 객체 생성
Path path = Paths.get("dir", "test.txt");
NIO2는 경로 자체를 나타내는 Path 클래스와 그 경로에 있는 파일이나 디렉토리 조작은 분리되어 있다. 파일이나 디렉터리에 대한 조작을 하려면 java.nio.file.Files
의 static 메서드를 이용한다.
// 디렉토리 생성
Path dir = Paths.get("dir");
Files.createDirectory(dir);
// 파일을 작성
Path file = dir.resolve("test.txt");
Files.createFile(file);
java.io.File
과 java.nio.file.Path
는 서로 변환이 가능하다.
File file = ...
Path path = file.toPath();
Paht path = ...
File file = path.toFile();