JAVA · 파일/IO
NIO2 — Path & Files & WatchService
Java 7+ NIO2의 Path와 Files로 파일 처리를 현대적으로 합니다.
파일/IO중급PathFilesNIO2readStringwriteString
핵심 설명
Java 7+ NIO2의 Path와 Files로 파일 처리를 현대적으로 합니다.
Java code
import java.nio.file.*;
import java.nio.charset.StandardCharsets;
import java.io.IOException;
import java.util.stream.Stream;
public class NIO2Demo {
public static void main(String[] args) throws IOException {
Path dir = Path.of("temp");
Path file = dir.resolve("hello.txt");
// 디렉토리 & 파일 생성
Files.createDirectories(dir);
Files.writeString(file, "Hello, NIO2!\n한글도 OK",
StandardCharsets.UTF_8);
// 읽기
String content = Files.readString(file, StandardCharsets.UTF_8);
System.out.println(content);
// 줄 단위 — Stream<String> (대용량에 적합)
try (Stream<String> lines = Files.lines(file, StandardCharsets.UTF_8)) {
lines.filter(l -> !l.isBlank())
.map(String::trim)
.forEach(System.out::println);
}
// 파일 복사, 이동, 삭제
Path copy = dir.resolve("copy.txt");
Files.copy(file, copy, StandardCopyOption.REPLACE_EXISTING);
Files.move(copy, dir.resolve("moved.txt"),
StandardCopyOption.REPLACE_EXISTING);
Files.deleteIfExists(dir.resolve("moved.txt"));
// 디렉토리 탐색
try (Stream<Path> paths = Files.walk(dir)) {
paths.filter(Files::isRegularFile)
.forEach(p -> System.out.println(p.getFileName()));
}
// 파일 속성
var attr = Files.readAttributes(file,
java.nio.file.attribute.BasicFileAttributes.class);
System.out.println("크기: " + attr.size() + "B");
System.out.println("생성: " + attr.creationTime());
// Path 조작
System.out.println(file.getFileName()); // hello.txt
System.out.println(file.getParent()); // temp
System.out.println(file.toAbsolutePath());
// 정리
Files.deleteIfExists(file);
Files.deleteIfExists(dir);
}
}학습 팁
Files.lines()는 Stream을 반환하므로 반드시 try-with-resources로 닫아야 합니다. 닫지 않으면 파일 핸들 누수가 발생합니다.
주의할 점
new File("path") 대신 Path.of("path")를 사용하세요. NIO2 Path는 더 많은 기능을 제공하고 플랫폼 독립적입니다.
자주 묻는 질문
NIO2 — Path & Files & WatchService란 무엇인가요?
Java 7+ NIO2의 Path 와 Files 로 파일 처리를 현대적으로 합니다.
NIO2 — Path & Files & WatchService 학습 시 주의할 점은 무엇인가요?
new File("path") 대신 Path.of("path") 를 사용하세요. NIO2 Path는 더 많은 기능을 제공하고 플랫폼 독립적입니다.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.