杰瑞科技汇

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

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

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

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

使用 File.listFiles() 方法(基础方法)

import java.io.File;
public class ReadFiles {
    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());
                } else if (file.isDirectory()) {
                    System.out.println("文件夹: " + file.getName());
                }
            }
        }
    }
}

使用递归读取所有子文件夹中的文件

import java.io.File;
public class ReadAllFiles {
    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.isFile()) {
                    System.out.println("文件: " + file.getAbsolutePath());
                } else if (file.isDirectory()) {
                    System.out.println("文件夹: " + file.getAbsolutePath());
                    listFiles(file); // 递归调用
                }
            }
        }
    }
}

使用 Java NIO Files.walk() 方法(Java 8+)

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 ReadFilesNIO {
    public static void main(String[] args) {
        try (Stream<Path> paths = Files.walk(Paths.get("C:\\path\\to\\your\\folder"))) {
            paths.filter(Files::isRegularFile)
                 .forEach(path -> System.out.println("文件: " + path));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Java NIO Files.walkFileTree() 方法(更灵活)

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

注意事项

  1. 路径分隔符:Windows使用反斜杠\,Unix/Linux使用正斜杠,或者使用File.separator
  2. 权限问题:确保程序有权限访问目标文件夹
  3. 异常处理:妥善处理可能抛出的异常,如SecurityExceptionIOException
  4. 性能考虑:对于大型文件夹结构,NIO方法通常比传统IO方法更高效

方法可以根据你的具体需求选择使用,其中Java NIO的方法(特别是Files.walk())在Java 8及更高版本中推荐使用,因为它提供了更简洁的API和更好的性能。

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