Java 學習記錄94 — Read Existing Directory Contents

張小雄
5 min readDec 13, 2021

--

這邊創了三個資料夾,跟好幾個文檔,各層級關係可以到下方我的 Github 去看

package nonBlockingIO.path.copyExamples;import java.io.IOException;
import java.nio.file.*;
public class ReadDirectory {
public static void main(String[] args) {
Path directory = FileSystems.getDefault().getPath("src/nonBlockingIO/path/copyExamples/Dir2");
try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory)) {
for (Path file : contents) {
System.out.println(file.getFileName());
}
} catch (IOException | DirectoryIteratorException e) {
System.out.println(e.getMessage());
}
}
}

輸出結果:

Dir3

file1.txt

file2.txt

file3.txt

遍歷指定位置的所有檔案,但不會進到更下一層,像是資料夾Dir3裡面還有其他資料夾跟資料

try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory, "*.dat")) {

輸出結果:

file3.dat

指定搜尋結尾是 .dat 的檔案

package nonBlockingIO.path.copyExamples;import java.io.IOException;
import java.nio.file.*;
public class ReadDirectory {
public static void main(String[] args) {
DirectoryStream.Filter<Path> filter =
new DirectoryStream.Filter<Path>() {
@Override
public boolean accept(Path entry) throws IOException {
return (Files.isRegularFile(entry));
}
};
Path directory = FileSystems.getDefault().getPath("src/nonBlockingIO/path/copyExamples/Dir2");
// try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory, "*.dat")) {
try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory, filter)) {
for (Path file : contents) {
System.out.println(file.getFileName());
}
} catch (IOException | DirectoryIteratorException e) {
System.out.println(e.getMessage());
}
}
}

輸出結果:

file1.txt

file2.txt

file3.dat

比較複雜的寫法,過濾出指定資料夾的所有檔案

DirectoryStream.Filter<Path> filter = p -> Files.isRegularFile(p);Path directory = FileSystems.getDefault().getPath("src/nonBlockingIO/path/copyExamples/Dir2");
// try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory, "*.dat")) {
try (DirectoryStream<Path> contents = Files.newDirectoryStream(directory, filter)) {
for (Path file : contents) {
System.out.println(file.getFileName());
}
} catch (IOException | DirectoryIteratorException e) {
System.out.println(e.getMessage());
}

輸出結果:

file1.txt

file2.txt

file3.dat

另一種寫法,這個叫做 Lambda expression

上面代碼全都紀錄在我的 Github

--

--

張小雄
張小雄

Written by 張小雄

記錄成為軟體工程師的過程

No responses yet