FileSystems — 파일 시스템 팩토리
FileSystems — 파일 시스템 팩토리
파일 시스템(FileSystem)을 생성하거나 가져오는 정적 팩토리 메서드들을 모아 둔 클래스예요. getDefault로 기본 파일 시스템을 얻고, 그 밖의 팩토리 메서드로 다른 유형의 파일 시스템을 만들 수 있어요. 이 클래스에 정의된 메서드를 처음 호출하면 기본 프로바이더가 로드돼요. 기본 프로바이더는 URI 스킴 "file"로 식별되며, Java 가상 머신(JVM)에서 접근 가능한 파일 시스템에 접근을 제공하는 FileSystem을 만들어요. 기본 프로바이더를 로드하거나 초기화하는 과정이 실패하면 지정되지 않은 오류가 던져져요.
본문
installedProviders 메서드를 처음 호출하면 설치된 모든 파일 시스템 프로바이더를 찾아 로드해요. 설치된 프로바이더는 ServiceLoader 클래스가 정의하는 서비스 프로바이더 로딩 기능으로 로드되며, 시스템 클래스 로더를 사용해요. 시스템 클래스 로더를 찾을 수 없으면 플랫폼 클래스 로더를 사용해요.
프로바이더는 보통 애플리케이션 클래스 경로에 있는 JAR 파일에 넣어 설치해요. 그 JAR 파일은 META-INF/services 리소스 디렉터리에 java.nio.file.spi.FileSystemProvider라는 프로바이더 설정 파일을 포함하고, 그 파일은 인자 없는 생성자를 가진 FileSystemProvider 구체 서브클래스의 정규화된 이름을 나열해요. 설치된 프로바이더를 찾는 순서는 구현에 따라 달라요. 프로바이더를 인스턴스화했는데 그 getScheme이 이전에 인스턴스화된 프로바이더와 같은 URI 스킴을 반환하면, 가장 최근에 인스턴스화된 중복 프로바이더는 버려져요. URI 스킴은 대소문자를 구분하지 않고 비교돼요.
이 클래스는 프로바이더를 찾을 때 ClassLoader를 지정할 수 있게 하는 팩토리 메서드도 정의해요.
주요 메서드
public static FileSystem getDefault()— 기본FileSystem을 반환해요. 기본 파일 시스템은 JVM에서 접근 가능한 파일 시스템에 접근을 제공하는 객체를 만들어요. 기본 파일 시스템의 작업 디렉터리는 현재 사용자 디렉터리예요.public static FileSystem getFileSystem(URI uri)— 기존FileSystem에 대한 참조를 반환해요. 주어진 URI의 스킴으로 식별되는 프로바이더를 찾기 위해 설치된 프로바이더들을 반복해요. URI 스킴은 대소문자 없이 비교돼요.public static FileSystem newFileSystem(URI uri, Map<String, ?> env) throws IOException— URI로 식별되는 새 파일 시스템을 만들어요. 주어진 URI의 스킴으로 프로바이더를 찾아 파일 시스템을 생성해요.public static FileSystem newFileSystem(URI uri, Map<String, ?> env, ClassLoader loader) throws IOException— URI로 식별되는 새 파일 시스템을 만들어요. 먼저newFileSystem(URI, Map)과 같은 방식으로 설치된 프로바이더를 찾고, 없으면 지정된loader를 사용해 프로바이더를 찾아요.public static FileSystem newFileSystem(Path path, ClassLoader loader) throws IOException— 파일의 내용을 파일 시스템처럼 접근하는 새FileSystem을 만들어요. 하나 이상의 파일 내용을 파일 시스템처럼 다루는 특수 프로바이더를 사용해요.public static FileSystem newFileSystem(Path path, Map<String, ?> env) throws IOException— 파일 내용을 파일 시스템으로 접근하는 새FileSystem을 만들어요.public static FileSystem newFileSystem(Path path) throws IOException—env없이 파일 내용을 파일 시스템으로 접근하는 새FileSystem을 만들어요.public static FileSystem newFileSystem(Path path, Map<String, ?> env, ClassLoader loader) throws IOException— 프로바이더를 지정된loader로 찾아 파일 내용을 파일 시스템으로 접근하는 새FileSystem을 만들어요.
// 기본 파일 시스템 얻기 → 로그 파일 경로 생성
Path log = FileSystems.getDefault().getPath("logs", "access.log");