如何在 Java 中读取文件夹的所有文件

Mohammad Irfan 2023年10月12日
  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