Path Paths Files

pepe·2025년 11월 8일

Paths

Paths는 path를 생성하는 공장이다.
경로 문자열을 넣으면 Path 객체로 변환해 준다.

Path path = Paths.get("C:/temp/myfile.txt");

//내부적으로 OS에 맞는 경로 구분자로 자동 처리
Path path = Paths.get("C:", "temp", "myfile.txt");

Paths는 경로를 객체로 다루게 해준다.

  • path의 주요 기능은 다음과 같다
기능메서드예시
파일명/확장자 가져오기getFileName()"myfile.txt"
특정 경로의 부모 디렉토리 가져오기getParent()"C:/temp"
경로의 특정 요소 가져오기getName(int index)"temp"
경로 결합(확장)resolve()"C:/temp/new"
상위 경로로 이동normalize()"../" 처리

Paths는 왜 만들었을까

Paths가 있기 전, File 클래스에는 Path같은 개념이 없고 파일 경로는 String으로 표현했다.

기존 File 클래스(java.io.File)가 가진 문제는 다음과 같다.

  1. OS 종속적 경로 구분자 문제
    window: \
    linux: /
  2. 경로 조작이 불편하다.
  3. 실제 파일 존재 여부, Path 개념 구분이 불가능하다.

Files

파일과 디렉토리를 실제로 조작하는 기능을 제공하는 클래스,
Files는 모든 메서드가 static인 유틸리티 클래스이다.


Files는 왜 만들었을까

File은 다음과 같은 문제가 있었다.

  1. 파일의 존재 여부, 생성/삭제 정도만 가능한 기능
  2. 파일 내용을 다루는 기능이 없음
  3. 파일 처리 실패 시 예외 정보가 부족함

이 문제를 해결하기 위해 NIO.2 (New IO)가 도입되었고 위에서 설명한 Paths, Path + Files 조합으로 파일 처리 방식이 만들어졌다.

요소역할
Path"주소(경로) 자체"를 표현하는 객체
Paths주소(Path)를 생성하는 공장
Files그 주소(Path)에 있는 파일을 읽고/쓰기/삭제하는 작업자

  • Files의 기능은 다음과 같다.
기능설명
파일 생성Files.createFile()
디렉토리 생성Files.createDirectory()
파일이 존재하는지 확인Files.exists()
파일 삭제Files.delete()
파일 복사 / 이동Files.copy() / Files.move()
파일 읽기 / 쓰기Files.readString() / Files.writeString()
파일 속성 조회Files.size(), Files.getLastModifiedTime()
스트림 기반 I/O 지원Files.newInputStream() / Files.newOutputStream()
디렉토리 목록 순회Files.walk()

File과 Files가 던지는 예외의 차이

File이 던지는 예외

File 클래스의 대부분 메서드는 예외를 던지지 않고 boolean을 반환한다.

메서드던지는 예외
createNewFile()IOException
mkdirs()예외 없음 (boolean 반환)
delete()예외 없음 (boolean 반환)
renameTo()예외 없음 (boolean 반환)
listFiles()파일 시스템 문제 시 SecurityException
File file = new File("/system/protected.txt");
if (!file.delete()) {
    System.out.println("삭제 실패, 이유는 알 수 없음");
}

Files가 던지는 예외

예외 타입의미
NoSuchFileException파일이 존재하지 않음
FileAlreadyExistsException생성하려는데 파일이 이미 있음
DirectoryNotEmptyException디렉토리가 비어 있지 않아 삭제 불가
AccessDeniedException권한 없음
IOException입출력 문제의 최상위 예외
Path path = Paths.get("/system/protected.txt");
Files.delete(path);
//실패했을 경우 예외로 알려줌
Exception in thread "main" java.nio.file.AccessDeniedException: /system/protected.txt
profile
pepe

0개의 댓글