파일 및 디렉토리의 경로를 표현하고, 관련 작업을 처리하는 데 사용한다.
java.io
패키지에 포함되어 있다.
File 객체를 생성할 때는 파일이나 디렉토리의 경로를 인자로 전달해줘야 한다.
public class FileRunner {
public static void main(String[] args) {
// 파일 생성
File file = new File("test.txt"); // 생성할 파일명
try {
boolean isCreated = file.createNewFile();
System.out.println("isCreated = " + isCreated);
}catch (IOException e){
e.printStackTrace();
}
// 디렉터리 생성
File directory = new File("./src/resources"); // 생성할 디렉토리명
boolean isDirectoryCreated = directory.mkdir();
System.out.println("isDirectoryCreated = " + isDirectoryCreated);
// 파일 및 디렉터리 삭제
boolean isFileDeleted = file.delete();
System.out.println("isFileDeleted = " + isFileDeleted);
// 디렉터리 내 파일 목록 조회
File[] files = directory.listFiles();
for (File f : files) {
System.out.println(f.getName());
}
}
}
스트림을 사용하여 파일 입출력 작업을 수행할 수 있다.
FileReader
, FileWriter
, FileInputStream
, FileOutputStream
등의 클래스를 사용하여 파일로부터 데이터를 읽거나 쓸 수 있다.
resources/data.txt 미리 만들어 놓기
123, 132
cheolcheol
Apple
Bat
Cat
// 파일 읽기
BufferedReader br = new BufferedReader(new FileReader("./resources/data.txt"));
String line;
while((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
// 파일 쓰기
BufferedWriter bw = new BufferedWriter(new FileWriter("./resources/output.txt"));
bw.write("Hellooooooo!");
bw.close();
resources/output.txt 생성 됨
Hellooooooo!
Path, Paths, Files 자바7
에서 추가된 java.nio.file
패키지에 포함되어 있다.
파일 또는 디렉토리의 경로
를 표현한다.
파일 시스템 내의 경로
를 추상화한 것으로, 파일을 읽고, 쓰고, 관리할 때 필요한 경로
정보를 제공한다.
Path 인스턴스를 생성하는 데 사용되는 유틸리티 클래스
주로 Paths.get()
를 통해 문자열 경로를 Path 객체로 변환할 때 사용한다.
Files 클래스는 파일 및 디렉토리를 생성, 삭제, 읽기, 쓰기 등을 포함한 다양한 파일 관련 작업을 수행하는 정적 메서드들을 제공한다.
파일 관련 기능
public class FileExample {
public static void main(String[] args) {
try {
// 파일 경로 생성
Path filePath = Paths.get("./resources/example.txt");
// 파일 생성
if (!Files.exists(filePath)) {
Files.createFile(filePath);
System.out.println("File created: " + filePath.toString());
} else {
System.out.println("File already exists: " + filePath.toString());
}
// 파일에 내용 쓰기
List<String> content = List.of("Hello", "Nice to meet you", "Bye");
Files.write(filePath, content);
System.out.println("Content written to file");
// 파일 내용 읽기
// String fileContent = new String(Files.readAllBytes(filePath));
// System.out.println("File content: " + fileContent);
System.out.println("------content start------");
Files.lines(filePath)
.forEach(System.out::println);
System.out.println("------content end------");
// 파일 삭제
Files.delete(filePath);
System.out.println("File deleted");
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
디렉토리 관련 기능
public class DirectoryExample {
public static void main(String[] args) throws IOException {
Path dirPath = Paths.get(".");
// 기준 디렉토리에서 존재하는 디렉토리 출력
Files.list(dirPath)
.forEach(System.out::println);
// 기준 디렉토리에서 4단계 내부 디렉토리에 존재하는 .java 파일들 출력
Files.walk(dirPath, 4)
.filter(path -> String.valueOf(path).contains(".java"))
.forEach(System.out::println);
// find는 filter보다 더 나은 필터 기능(attributes)을 제공한다.
Files.find(dirPath,
4,
(path, attributes) -> String.valueOf(path).contains(".java")
).forEach(System.out::println);
}
}