杰瑞科技汇

Java如何获取文件夹下所有文件?

Java 获取文件夹下所有文件的方法

在Java中,有几种方法可以获取文件夹下的所有文件,以下是几种常用的实现方式:

Java如何获取文件夹下所有文件?-图1
(图片来源网络,侵删)

使用 File.listFiles() 方法

import java.io.File;
public class ListFiles {
    public static void main(String[] args) {
        File folder = new File("C:\\path\\to\\your\\folder");
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isFile()) {
                    System.out.println(file.getName());
                }
            }
        }
    }
}

递归获取所有子文件夹中的文件

import java.io.File;
public class ListFilesRecursive {
    public static void main(String[] args) {
        File folder = new File("C:\\path\\to\\your\\folder");
        listFiles(folder);
    }
    public static void listFiles(File folder) {
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                if (file.isDirectory()) {
                    listFiles(file); // 递归调用
                } else {
                    System.out.println(file.getAbsolutePath());
                }
            }
        }
    }
}

使用 Java NIO (Java 7+)

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class ListFilesNIO {
    public static void main(String[] args) throws IOException {
        Path start = Paths.get("C:\\path\\to\\your\\folder");
        Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {
                System.out.println(file.getFileName());
                return FileVisitResult.CONTINUE;
            }
            @Override
            public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) {
                return FileVisitResult.CONTINUE;
            }
        });
    }
}

使用 Java 8 Stream API

import java.io.File;
import java.util.Arrays;
public class ListFilesStream {
    public static void main(String[] args) {
        File folder = new File("C:\\path\\to\\your\\folder");
        Arrays.stream(folder.listFiles())
              .filter(File::isFile)
              .forEach(file -> System.out.println(file.getName()));
    }
}

递归使用 Stream API

import java.io.File;
import java.util.stream.Stream;
public class ListFilesRecursiveStream {
    public static void main(String[] args) {
        File folder = new File("C:\\path\\to\\your\\folder");
        listFiles(folder).forEach(System.out::println);
    }
    public static Stream<File> listFiles(File folder) {
        File[] files = folder.listFiles();
        if (files == null) {
            return Stream.empty();
        }
        return Stream.concat(
            Arrays.stream(files).filter(File::isFile),
            Arrays.stream(files).filter(File::isDirectory).flatMap(ListFilesRecursiveStream::listFiles)
        );
    }
}

注意事项

  1. 确保文件夹路径正确,并且程序有权限访问该文件夹
  2. 处理可能出现的 NullPointerException(当文件夹不存在或无法访问时)
  3. 对于大型文件夹,递归方法可能会导致栈溢出,可以考虑使用迭代方法
  4. 在Java 7及以上版本,推荐使用NIO API,它提供了更好的性能和功能

方法可以根据你的具体需求选择使用,对于简单的文件列表,listFiles() 方法就足够了;对于复杂的文件遍历需求,NIO或递归方法会更合适。

Java如何获取文件夹下所有文件?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇