這邊創了三個資料夾,跟好幾個文檔,各層級關係可以到下方我的 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