Java NIO-경로

이름에서 알 수 있듯이 Path는 특정 위치에서 검색하고 액세스 할 수 있도록 파일 또는 파일 시스템의 디렉토리와 같은 엔티티의 특정 위치입니다.

기술적으로 Java 측면에서 Path는 Java 버전 7에서 Java NIO 파일 패키지에 도입 된 인터페이스로 특정 파일 시스템의 위치를 ​​나타내는 인터페이스입니다. 경로 인터페이스가 Java NIO 패키지에 있으므로 정규화 된 이름을 java로 가져옵니다. .nio.file.Path.

일반적으로 엔티티의 경로는 두 가지 유형이 될 수 있습니다 하나는 절대 경로이고 다른 하나는 상대 경로입니다. 두 경로의 이름은 절대 경로가 루트에서 엔티티까지의 위치 주소이고 상대 경로는 위치 주소임을 나타냅니다. 다른 경로에 상대적입니다 .Path는 정의에서 Windows의 경우 "\"로, unix 운영 체제의 경우 "/"로 구분 기호를 사용합니다.

Path의 인스턴스를 얻기 위해 java.nio.file.Paths 클래스의 정적 메소드를 사용할 수 있습니다. get()이 메서드는 경로 문자열 또는 경로 문자열을 구성 할 때 결합 된 문자열 시퀀스를 Path 인스턴스로 변환합니다 .This method converts a path string, or a sequence of strings that when join form a path string, to a Path instance. 전달 된 인수에 잘못된 문자가 포함 된 경우이 메서드는 런타임 InvalidPathException도 throw합니다.

위에서 언급했듯이 절대 경로는 루트 요소와 파일을 찾는 데 필요한 전체 디렉토리 목록을 전달하여 검색합니다. 상대 경로는 기본 경로와 상대 경로를 결합하여 검색 할 수 있습니다. 두 경로의 검색은 다음 예제에서 설명합니다.

package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
   public static void main(String[] args) throws IOException {
      Path relative = Paths.get("file2.txt");
      System.out.println("Relative path: " + relative);
      Path absolute = relative.toAbsolutePath();
      System.out.println("Absolute path: " + absolute);
   }
}

지금까지 우리는 경로 인터페이스가 왜 필요한지, 어떻게 액세스 할 수 있는지 알고 있었으며 이제 경로 인터페이스가 제공하는 중요한 메소드가 무엇인지 알게되었습니다.

경로 인터페이스의 중요한 방법

  • getFileName() −이 객체를 생성 한 파일 시스템을 반환합니다.

  • getName() −이 경로의 이름 요소를 경로 객체로 반환합니다.

  • getNameCount() − 경로에있는 이름 요소의 수를 반환합니다.

  • subpath() −이 경로의 이름 요소의 하위 시퀀스 인 상대 경로를 반환합니다.

  • getParent() − 부모 경로를 반환하거나이 경로에 부모가없는 경우 null을 반환합니다.

  • getRoot() −이 경로의 루트 구성 요소를 Path 객체로 반환하거나이 경로에 루트 구성 요소가 없으면 null을 반환합니다.

  • toAbsolutePath() −이 경로의 절대 경로를 나타내는 Path 객체를 반환합니다.

  • toRealPath() − 기존 파일의 실제 경로를 반환합니다.

  • toFile() −이 경로를 나타내는 File 객체를 반환합니다.

  • normalize() − 중복 된 이름 요소가 제거 된 경로 인 경로를 반환합니다.

  • compareTo(Path other) − 두 개의 추상 경로를 사전 식으로 비교합니다.이 메소드는 인수가이 경로와 같으면 0을 반환하고,이 경로가 사전 식으로 인수보다 작 으면 0보다 작은 값을 반환하고,이 경로가 사 전적으로 인수보다 크면 0보다 큰 값을 반환합니다. .

  • endsWith(Path other) −이 경로가 주어진 경로로 끝나는 지 테스트합니다. 주어진 경로에 N 개의 요소가 있고 루트 구성 요소가없고이 경로에 N 개 이상의 요소가있는 경우이 경로는 각 경로의 마지막 N 개 요소 인 경우 지정된 경로로 끝납니다. 루트에서 가장 먼 요소에서 시작하여 동일합니다.

  • endsWith(String other) −이 경로가 endsWith (Path) 메서드에 지정된 방식으로 정확히 지정된 경로 문자열을 변환하여 생성 된 경로로 끝나는 지 테스트합니다.

다음 예제는 위에서 언급 한 Path 인터페이스의 다른 방법을 설명합니다.

package com.java.nio;
import java.io.IOException;
import java.nio.Buffer;
import java.nio.ByteBuffer;
import java.nio.file.FileSystem;
import java.nio.file.LinkOption;
import java.nio.file.Path;
import java.nio.file.Paths;
public class PathDemo {
   public static void main(String[] args) throws IOException {
      Path path = Paths.get("D:/workspace/ContentW/Saurav_CV.docx");
      FileSystem fs =  path.getFileSystem();
      System.out.println(fs.toString());
      System.out.println(path.isAbsolute());
      System.out.println(path.getFileName());
      System.out.println(path.toAbsolutePath().toString());
      System.out.println(path.getRoot());
      System.out.println(path.getParent());
      System.out.println(path.getNameCount());
      System.out.println(path.getName(0));
      System.out.println(path.subpath(0, 2));
      System.out.println(path.toString());
      System.out.println(path.getNameCount());
      Path realPath = path.toRealPath(LinkOption.NOFOLLOW_LINKS);
      System.out.println(realPath.toString());
      String originalPath = "d:\\data\\projects\\a-project\\..\\another-project";
      Path path1 = Paths.get(originalPath);
      Path path2 = path1.normalize();
      System.out.println("path2 = " + path2);
   }
}