경로 인터페이스
1. 경로는 디렉토리 이름 시퀀스를 나타내고 파일 이름을 나타냅니다. 경로의 첫 번째 구성 요소가 루트 구성 요소 인 경우, / 또는 C : /와 같은 절대 경로이고 액세스 할 수있는 루트 구성 요소는 파일 시스템에 따라 다릅니다.
2. 루트 구성 요소로 시작하는 경로는 절대 경로이며, 그렇지 않으면 상대 경로입니다.
3. 정적 경로는 하나 이상의 문자열을 허용하고 문자열은 기본 파일 시스템의 경로 분리기 (Unix IS /, Windows IS /)에 의해 자동으로 연결되어 교차 플랫폼 문제를 해결합니다. 그런 다음 연결된 결과를 구문 분석합니다. 합법적 인 경로가 아닌 경우 InvalidPathException 예외를 던지십시오. 그렇지 않으면 경로 개체가 반환됩니다.
// Unix 파일 시스템 경로 절대 = paths.get ( "/home", "cat")이라고 가정합니다. // 절대 경로 경로 상대 = pahts.get ( "ixenos", "config", "user.properties"); // 상대 경로
4. 문자열 경로에서 경로 개체를 가져옵니다
get는 또한 전체 경로를 가져올 수 있습니다 (예 : 여러 구성 요소로 구성된 단일 문자열). 예를 들어 구성 파일에서 경로를 읽으십시오.
String basedir = properties.getProperty ( "base.dir"); // 획득/opt/ixenos 또는 c :/program files/ixenos path basepath = paths.get (기반);
5. 결합 또는 구문 분석 경로
1) P.Resolve (Q) 호출은 다음 규칙에 따라 경로를 반환합니다. Q가 절대 경로 인 경우 Q를 반환하십시오. 그렇지 않으면 추가 된 경로는 P/Q 또는 P/Q를 반환합니다.
Path WorkRelative = paths.get ( "Work"); Path WorkPath = Basepath.Resolve (WorkRelative); // Resolve도 문자열 매개 변수를 허용 할 수 있습니다. 경로 workPath = BasePath.Resolve ( "Work");
2) P.Resolvesibling ( "Q") 호출은 지정된 경로 P의 부모 경로 O를 해결하고 형제 경로 O/Q를 생성합니다.
Path TempPath = WorkPath.Resolvesibling ( "Temp"); / * WorkPath가/opt/ixenos/work 인 경우/opt/ixenos/temp가 만들어집니다 */
3) P.Relativize (R)에 전화하면 중복 경로 q가 생성됩니다. 구문 분석 Q는 상대 경로 r을 생성합니다. 결국, R은 p와 교차로 경로를 포함하지 않습니다.
/* patha는/home/misty pathb is/home/ixenos/config now patha pathb가 있는데, 이로 인해 중복 경로가 생성 될 것입니다*/path pathc = patha.relativize (pathb); // 현재 PARC는 ../ixenos/config/* 정상화 메소드는 중복 부분을 제거합니다*/path pathd = pathc.normanize (); // pathd는/ixenos/config입니다
4) Toabsolutepath는 루트 구성 요소에서 시작하여 주어진 경로의 절대 경로를 생성합니다.
5) 경로 클래스에는 GetParent, GetFilename, GetRoot // 루트 디렉토리 받기와 같은 경로를 분리하고 결합하는 유용한 방법이 있습니다.
6) Path에는 레거시 파일 클래스를 다루는 Tofile 메소드가 있으며 파일 클래스에는 Topath 메소드도 있습니다.
파일 도구 클래스
1. 파일을 읽고 쓰십시오
메소드 서명 :
정적 경로 쓰기 (경로 경로, 바이트 [] 바이트, 개방형 ... 옵션)
정적 경로 쓰기 (경로 경로, 반복 가능한 <? 확장 charSequence> 선, 오픈 옵션 ... 옵션)
다음은 아래에 사용 된 방법 만 있습니다. 더 많은 방법은 API 문서를 참조하십시오 ...
그중에서도 OpenOption은 NIO 인터페이스이며 StandardOpenoption은 열거 구현 클래스입니다. 각 열거 인스턴스 기능에 대한 API 문서를 확인하십시오.
/* 파일에서 제공하는 간단한 방법은 중간 길이의 텍스트 파일을 처리하는 데 적합합니다. 처리 할 파일이 크거나 바이너리 인 경우 여전히 클래식 IO 스트림을 사용해야합니다.*/// 파일의 모든 내용을 바이트 배열 바이트로 읽으십시오 [] bytes = files.readallBytes (path); // 경로 객체로 전달 // 그 후 문자열 세트에 따라 문자열을 만들 수 있습니다. 문자열 내용 = 새 문자열 (bytes, charset); // line 시퀀스로 직접 읽을 수 있습니다. list <string> lines = files.readalllines (path, charset); 반대로 파일에 문자열을 쓸 수 있습니다. // byte [] // 컨텐츠가 추가되고, 매개 변수를 기준으로 add와 같은 기능을 결정합니다 (path, content.getBytes (charset), StandardOpenOption.append); // 열거 객체를 일시 중지하고 추가 스위치를 켜십시오. // 줄 문자열의 수집 목록을 파일 파일에 작성 (경로, 줄);
2. 복사, 자르기, 삭제
메소드 서명 :
정적 경로 사본 (경로 소스, 경로 대상, 카피 옵션 ... 옵션)
정적 경로 이동 (경로 소스, 경로 대상, 카피 옵션 ... 옵션)
정적 무효 삭제 (경로 경로) // 경로가 존재하지 않으면 예외가 발생합니다. 이 시간에 다음을 호출하는 것이 좋습니다.
정적 부울 deleteifexists (경로 경로)
다음은 아래에 사용 된 방법 만 있습니다. 더 많은 방법은 API 문서를 참조하십시오 ...
그 중에서도 카피 옵션은 NIO 인터페이스이며 StandardCopyoption은 열거 구현 클래스입니다. 각 열거 인스턴스 기능에 대한 API 문서를 확인하십시오.
Atomic_move가 사용되거나 이동이 성공적으로 완료되거나 소스 파일이 원래 위치에 보관되도록하기 위해 채워질 수 있습니다.
// files.copy (frompath, topath); // files.move (frompath, topath);/* Topath가 이미 존재하면 작동이 실패합니다. 덮어 쓰려면 replace_existing 매개 변수를 전달해야합니다. 또한 파일 속성을 복사하고 copy_attributes*/files.copy (frompath, topath, StandardCopyoption.replace_Existing, StandardCopyOption.copy_attributes)를 복사합니다.
3. 파일과 디렉토리를 만듭니다
// 마지막 구성 요소를 제외하고 새 디렉토리를 만듭니다. 다른 구성 요소는 기존 파일이어야합니다. // 경로에서 중간 디렉토리를 작성하여 존재하지 않는 중간 구성 요소 파일을 생성 할 수 있습니다. 이미 존재하면 파일의 존재를 확인하기 위해 예외가 발생합니다. 따라서 프로세스*/files.createfile (path)에서 파일 생성 조작을 수행 할 수 없습니다. // pre-/접미사를 추가하여 임시 파일 또는 임시 디렉토리 경로를 생성하여 newPath = files.createMpfile (dir, prefix, plusix); path newPath = files.createTempDirectory (dir, prefix);
4. 파일 정보를 얻습니다
생략, 자세한 내용은 API 문서 또는 Corejava Page51을 참조하십시오.
5. 디렉토리의 파일을 반복하십시오
이전 파일 클래스에는 디렉토리의 모든 파일로 구성된 문자열 배열, String [] List () 및 String [] List (FileFilter Filter)에 구성된 문자열 배열을 얻는 두 가지 방법이 있지만 디렉토리에 많은 파일이 포함되어 있으면이 두 메소드의 성능이 매우 낮습니다.
원인 분석 :
1. // 파일 클래스 목록 모든 파일 공개 문자열 [] list () {SecurityManager Security = System.GetSecurityManager (); // 파일 시스템 권한은 if (security! = null) {security.checkread (path); } if (isinValid ()) {return null; } return fs.list (this); // FileSystem 목록에 대한 기본 호출} // 파일 시스템 목록 초록 클래스 // 파일 시스템 권한은 if (security! = null) {security.checkread (path); } if (isinValid ()) {return null; } return fs.list (this); // 파일 시스템 목록에 대한 기본 호출} // 파일 시스템 초록 클래스 목록 // 파일 클래스는 fs를 기본 파일 시스템 fs = defaultFilesystem.getFilesystem (//)에 의해 정적으로 생성 한 개인 정적 최종 파일 시스템입니다. DefaultFilesystem { /*** Windows 플랫폼의 파일 시스템 개체를 반환합니다. */ public static filesystem getfilesystem () {return new winntfilesystem (); }} // winntfilesystem 클래스는 파일 시스템 초록 클래스에서 상속합니다. 여기서 우리는 주로 목록 (파일) 메소드 @overridepublic native string [] list (file f);/*이것이 기본 메소드임을 알 수 있습니다.이 메소드는 목록의 작동이 운영 체제의 파일 시스템에 의해 제어됨을 보여줍니다. 디렉토리에 많은 파일이 포함되어 있으면이 방법의 성능이 매우 낮습니다. 따라서이를 대체하기 위해 Nio의 파일 클래스는 NewDirectoryStream (Path Dir)과 과부하 된 메소드를 설계했습니다.이 방법은 반복 가능한 객체를 생성 할 수 있습니다 (Foreach) */// ~ 2. // 필터 공개 문자열 호출 [] list (filenamefilter filter) {// Interface Callback 문자열 이름 [] = list (); // 호출 목록은 모두 if ((names == null) || (filter == null)) {return names; } list <string> v = new ArrayList <> (); for (int i = 0; i <names.length; i ++) {if (filter.accrect (this, names [i])) {// callback filenamefileter 객체 v.add의 수락 메소드 (names [i]); }} return v.toArray (새 문자열 [v.size ()]; }현재 첨단 기술이 제공됩니다. 파일은 반복 가능한 디렉토리 스트림을 얻고,
디렉토리 경로를 통과하고 자손 디렉토리를 가로 지르고 디렉토리 경로 스트림을 반환하십시오. 여기에 관련된 모든 경로는 파일이 아닌 디렉토리입니다!
따라서 파일 클래스 클래스는 NewDirectoryStream (Path DIR)과 오버로드 된 방법을 설계하여 반복 가능한 객체를 생성합니다 (반복에 사용될 수 있음).
디렉토리를 반복하여 반복적 인 자손 파일 모음을 얻으십시오.
staticDirectoryStream<Path> | newDirectoryStream(Path dir) 은 DirectoryStream 를 엽니 다. |
staticDirectoryStream<Path> | newDirectoryStream(Path dir, DirectoryStream.Filter<? super Path> filter) DirectoryStream 를 엽니 다. |
staticDirectoryStream<Path> | newDirectoryStream(Path dir, String glob) |
디렉토리 스트림 반환은 반복 가능한 모든 경로를 저장하는 컬렉션으로 간주 될 수 있습니다.
따라서 반복자 또는 반복적 인 반복이지만 반복자를 사용할 때는 다른 반복기를 호출하지 않도록주의하십시오.
DirectoryStream은 반복적으로 확장되지만 단일 반복기 만 지원하기 때문에 일반 목적 반복이 아닙니다. 반복자 메소드를 호출하여 두 번째 또는 후속 반복자를 얻을 수 있습니다.
예:
try (directoryStream <ath> entries = files.newdirectoryStream (dir)) {for (경로 항목 : entries) {...}}Glob 매개 변수를 전달할 수 있습니다. 즉, Glob Mode를 사용하여 파일을 필터링합니다 (List (FileFilter Filter) 대신) :
NewDirectoryStream (Path Dir, String Glob)은 문자열 유형입니다.
try (directoryStream <ath> entries = files.newdirectoryStream (dir, "*.java")) // {...}글로벌 모드
소위 글로벌 패턴은 쉘에 의해 사용 된 단순화 된 정규 표현을 나타냅니다.
1. Asterisk*는 경로 구성 요소에서 0 이상의 문자와 일치합니다. 예를 들어 *.java는 현재 디렉토리의 모든 Java 파일과 일치합니다.
2. 두 개의 별표 ** 디렉토리 경계에서 0 이상의 문자를 일치시킵니다. 예를 들어, **. Java는 모든 하위 디렉토리에서 Java 파일과 일치합니다
3. 물음표 (?)은 한 캐릭터와 일치합니다. 예를 들어, ????. Java는 확장을 제외하고 Java 파일의 네 가지 문자와 일치합니다. 사용 ? *는 와일드 카드 문자이며 숫자를 지정하지 않기 때문입니다.
4. [...] 문자 세트와 일치하기 위해 연결 [0-9] 및 역 문자 [! 0-9]를 사용할 수 있습니다. 예를 들어, test [0-9a-f] .java trestx.java와 일치하는 X는 16 진수라고 가정하고 [0-9A-F]는 단일 문자와 B와 같은 16 진수와 일치한다고 가정합니다.
정사각형 브래킷에서 대시를 사용하여 두 문자를 분리하는 경우이 두 문자 범위 내의 모든 것과 일치 할 수 있음을 의미합니다 (예 : [0-9]는 0 ~ 9 숫자와 일치하는 것을 의미합니다).
5. {...} 쉼표로 분리 된 여러 옵션 옵션 중 하나 일치; 예를 들어 *. {java, class} 모든 Java 파일 및 클래스 파일과 일치합니다.
6./ 위의 패턴 중 하나의 탈출 문자; 예를 들어 */**는 모든 하위 디렉토리에서 파일 이름과 파일을 일치시킵니다.
다음은 네티즌이 요약 한 글로그 모델입니다.
| 글로벌 모드 | 설명하다 |
|---|---|
| *.txt | 모든 파일을 확장자 .txt와 일치시킵니다 |
| *. {html, htm} | 모든 파일을 .html 또는 .htm의 확장자와 일치시킵니다. {}는 그룹 모드에 사용되며 쉼표로 분리됩니다. |
| ? .txt | 단일 문자와 파일 이름 및 확장자 .txt와 일치 |
| . | 모든 파일을 확장자와 일치시킵니다 |
| C :/사용자/* | C 드라이브의 사용자 디렉토리의 모든 파일을 일치시킵니다. BackSlash "/"는 다음 문자 바로를 피하는 데 사용됩니다. |
| /집/** | UNIX 플랫폼의 하위 디렉토리 하에서 모든 /홈 디렉토리 및 파일을 일치시킵니다. ** 현재 디렉토리와 모든 하위 디렉터와 일치하는 데 사용됩니다. |
| [xyz] .txt | 모든 단일 문자와 파일 이름으로 일치시키고 단일 문자에는 "x"또는 "y"또는 "z"중 하나만 포함되며 .txt의 확장자가 있습니다. 사각형 브래킷 []는 컬렉션을 지정하는 데 사용됩니다 |
| [ac] .txt | 모든 단일 문자와 파일 이름으로 일치시키고 단일 문자에는 "A"또는 "B"또는 "C"의 세 가지 유형 중 하나만 포함되며 .txt의 확장 기능이 있습니다. 마이너스 부호 "-"는 범위를 지정하는 데 사용되며 사각형 브래킷에서만 사용할 수 있습니다 [] |
| [! a] .txt | 모든 단일 문자를 파일 이름으로 일치 시키면 단일 문자에는 문자 "A"를 포함 할 수 없으며 확장자는 .txt입니다. 느낌표 "!" 부정하는 데 사용됩니다 |
특정 디렉토리의 자손 파일의 모든 컬렉션을 반복하는 것이 좋지 않습니까? 어서, 디렉토리의 모든 후손 (디렉토리 및 파일 포함)을 직접 횡단합시다.
파일 클래스의 WalkFileTree 메소드를 호출하고 FileVisitor Interface 유형의 객체를 전달할 수 있습니다 (API에서 발견하기를 기다리는 더 많은 방법이 있습니다 ...)
/*Filevisitor 서브 클래스*/files.walkFileTree (dir, new simpleFilevisitor <path> () {// walkfileTree 콜백이 방법은 모든 후손 공개 파일 Visitresult visitfile (Path Path, Path Path, 기본 유전물)를 통과하는 데 사용됩니다. ioexception {if.) //). WalkfileTree (모든 후손 회원)의 목적과 관련이 없습니다.요약합시다.
files.newdirectoryStream (Path Dir) Traversal 후 반복적 인 후손 파일 모음을 반환합니다.
files.walkfiletree (Path Dir, Filevisitor FV)는 자손의 디렉토리와 파일을 가로 지르는 과정입니다.
zip 파일 시스템
위에서 알 수 있듯이 Paths 클래스는 기본 파일 시스템의 경로, 즉 사용자의 로컬 디스크의 파일을 찾습니다.
실제로 Zip 파일 시스템과 같은 다른 파일 시스템도 가질 수 있습니다.
/*zipname이 zip 파일의 이름이라고 가정*/filesystem fs = filesystems.newfilesystem (paths.get (zipname), null);
위의 코드는 zip 문서의 모든 파일을 포함하는 zip 이름 기반 파일 시스템을 만듭니다.
1) 파일 이름 (문자열 유형)을 알고 있으면이 zip 문서에서 파일을 복사하기 쉽습니다.
files.copy (fs.getpath (filename), TargetPath);
Q : fs.getPath는 Zip 파일 시스템을 사용하여 GetPath를 사용하여 기본 파일 시스템을 호출 할 수 있습니까?
A : 그렇습니다. FileSystem 클래스에는 static getDefault () 메소드가 있으며,이 파일 파일 시스템 객체를 반환하며 파일 이름 GetPath에서도 얻을 수 있습니다.
GetPath (문자열 이름)가 가로 지르거나 임의의 액세스 여부에 관계없이 구체적인 목적으로 시간이있을 때 소스 코드 구현을 확인하십시오.
2) zip 문서에 모든 파일을 나열하려면 WalkfileTree를 사용하여 파일 트리를 가로 질러
FileSystem fs = filesystems.newfilesystem (paths.get (filename), null); // walkfileTree는 통과하기 위해 디렉토리 경로를 전달해야합니다. 파일 Visitor Object Files.WalkFileTree ( "/"), FrsimpleFilevisitor <path> () {public filevistrib (publicfileattrib) 예외 {system.out.println (파일);Java Nio Path 인터페이스 및 파일 클래스의 위의 예는 함께 작동합니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.