PHpullh
학습 라이브러리/Java/NIO2 — Path & Files & WatchService

JAVA · 파일/IO

NIO2 — Path & Files & WatchService

Java 7+ NIO2의 PathFiles로 파일 처리를 현대적으로 합니다.

파일/IO중급PathFilesNIO2readStringwriteString

핵심 설명

Java 7+ NIO2의 PathFiles로 파일 처리를 현대적으로 합니다.

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는 더 많은 기능을 제공하고 플랫폼 독립적입니다.