如何在 Java 中讀取資料夾的所有檔案
Mohammad Irfan
2023年1月30日
2020年10月15日
- 在 Java 中如何讀取資料夾的所有檔案
-
在 Java 中使用
Files
類讀取一個資料夾的所有檔案 -
在 Java 中使用
newDirectoryStream()
方法從資料夾中讀取所有檔案 -
使用 Java 中的
walkFileTree()
方法讀取資料夾的所有檔案
本教程介紹瞭如何在 Java 中讀取一個資料夾的所有檔案,並列舉了一些示例程式碼來理解它。
有幾種方法可以獲得一個資料夾的所有檔案。在這裡我們可以使用 File
、Files
和 DirectoryStream
類,還有很多。讓我們來看看這些例子。
在 Java 中如何讀取資料夾的所有檔案
在這裡,我們使用 File
類來收集源目錄中的所有檔案和資料夾,然後使用 isDirectory()
方法來檢查它是檔案還是資料夾。請看下面的例子。
import java.io.File;
import java.text.ParseException;
public class SimpleTesting {
public static void findAllFilesInFolder(File folder) {
for (File file : folder.listFiles()) {
if (!file.isDirectory()) {
System.out.println(file.getName());
} else {
findAllFilesInFolder(file);
}
}
}
public static void main(String[] args) throws ParseException {
File folder = new File("/home/folder/src");
findAllFilesInFolder(folder);
}
}
在 Java 中使用 Files
類讀取一個資料夾的所有檔案
如果你想使用流,使用 Files
類的 walk()
方法,返回一個 Path
流。之後,我們使用 filter()
方法只收集檔案,並使用 forEach()
列印它們。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class SimpleTesting {
public static void main(String[] args) throws IOException {
try (Stream<Path> paths = Files.walk(Paths.get("/home/folder/src"))) {
paths
.filter(Files::isRegularFile)
.forEach(System.out::println);
}
}
}
在 Java 中使用 newDirectoryStream()
方法從資料夾中讀取所有檔案
在這裡,我們使用 Files
類和它的 newDirectoryStream()
方法,返回一個 Path
的流。之後,我們使用 for-each
迴圈來迭代檔案列表並列印檔名。
import java.io.IOException;
import java.nio.file.DirectoryIteratorException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class SimpleTesting {
public static void main(String[] args) throws IOException {
try (DirectoryStream<Path> stream = Files.newDirectoryStream(Paths.get("/home/folder/src/"))) {
for (Path file: stream) {
System.out.println(file.getFileName());
}
} catch (IOException | DirectoryIteratorException ex) {
System.err.println(ex);
}
}
}
使用 Java 中的 walkFileTree()
方法讀取資料夾的所有檔案
這裡,我們使用 Files
類的 walkFileTree()
方法,該方法需要兩個引數:原始檔夾和 SimpleFileVisitor
引用。請看下面的例子。
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
public class SimpleTesting {
public static void main(String[] args) throws IOException {
SimpleFileVisitor<Path> file = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path filePath, BasicFileAttributes attrs) throws IOException {
System.out.println(filePath);
return FileVisitResult.CONTINUE;
}
};
Files.walkFileTree(Paths.get("/home/folder/src"), file);
}
}