如何在 Java 中讀取資料夾的所有檔案

Mohammad Irfan 2023年1月30日 2020年10月15日
  1. 在 Java 中如何讀取資料夾的所有檔案
  2. 在 Java 中使用 Files 類讀取一個資料夾的所有檔案
  3. 在 Java 中使用 newDirectoryStream() 方法從資料夾中讀取所有檔案
  4. 使用 Java 中的 walkFileTree() 方法讀取資料夾的所有檔案
如何在 Java 中讀取資料夾的所有檔案

本教程介紹瞭如何在 Java 中讀取一個資料夾的所有檔案,並列舉了一些示例程式碼來理解它。

有幾種方法可以獲得一個資料夾的所有檔案。在這裡我們可以使用 FileFilesDirectoryStream 類,還有很多。讓我們來看看這些例子。

在 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);
	}
}

相關文章 - Java File

相關文章 - Java IO