Java案例如何遍历文件夹文件?

wen java案例 10

本文目录导读:

Java案例如何遍历文件夹文件?

  1. 使用 File.listFiles() 方法(基础版)
  2. 使用 Java 8 的 Files.walk() 方法(推荐)
  3. 使用 Files.walkFileTree() 方法(高级版)
  4. 过滤特定类型的文件
  5. 只遍历当前目录(不递归)
  6. 使用 Apache Commons IO
  7. 使用建议

在Java中遍历文件夹文件有多种方式,下面介绍几种最常用的方法:

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

import java.io.File;
public class FileTraversal {
    public static void main(String[] args) {
        String folderPath = "D:/your-folder";
        listFiles(new File(folderPath));
    }
    public static void listFiles(File folder) {
        if (folder.isDirectory()) {
            File[] files = folder.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        System.out.println("目录: " + file.getAbsolutePath());
                        listFiles(file); // 递归遍历子目录
                    } else {
                        System.out.println("文件: " + file.getAbsolutePath());
                    }
                }
            }
        }
    }
}

使用 Java 8 的 Files.walk() 方法(推荐)

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.stream.Stream;
public class FilesWalkExample {
    public static void main(String[] args) throws IOException {
        try (Stream<Path> walk = Files.walk(Paths.get("D:/your-folder"))) {
            walk.forEach(path -> {
                if (Files.isDirectory(path)) {
                    System.out.println("目录: " + path);
                } else {
                    System.out.println("文件: " + path);
                }
            });
        }
    }
}

使用 Files.walkFileTree() 方法(高级版)

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class FileTreeExample {
    public static void main(String[] args) throws IOException {
        Path startPath = Paths.get("D:/your-folder");
        Files.walkFileTree(startPath, 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;
            }
            @Override
            public FileVisitResult visitFileFailed(Path file, IOException exc) {
                System.err.println("访问文件失败: " + file);
                return FileVisitResult.CONTINUE;
            }
        });
    }
}

过滤特定类型的文件

import java.io.IOException;
import java.nio.file.*;
import java.util.stream.Stream;
public class FilterFilesExample {
    public static void main(String[] args) throws IOException {
        try (Stream<Path> walk = Files.walk(Paths.get("D:/your-folder"))) {
            walk.filter(Files::isRegularFile)
                .filter(path -> path.toString().endsWith(".txt"))
                .forEach(System.out::println);
        }
    }
}

只遍历当前目录(不递归)

import java.io.File;
import java.nio.file.*;
public class ShallowTraversal {
    public static void main(String[] args) {
        // 方法1: 使用 File
        File folder = new File("D:/your-folder");
        File[] files = folder.listFiles();
        if (files != null) {
            for (File file : files) {
                System.out.println(file.getName());
            }
        }
        // 方法2: 使用 Files.list() (Java 8+)
        try (Stream<Path> paths = Files.list(Paths.get("D:/your-folder"))) {
            paths.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

使用 Apache Commons IO

如果你使用 Maven,先添加依赖:

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.util.Collection;
public class CommonsIOExample {
    public static void main(String[] args) {
        File folder = new File("D:/your-folder");
        // 获取所有文件(包括子目录中的)
        Collection<File> files = FileUtils.listFiles(folder, 
            new String[]{"txt", "java"}, // 文件扩展名
            true);  // 是否递归子目录
        for (File file : files) {
            System.out.println(file.getAbsolutePath());
        }
    }
}

使用建议

  • 简单遍历:使用 Files.walk() 方法
  • 需要控制遍历过程:使用 Files.walkFileTree() 方法
  • 只需要当前目录:使用 File.listFiles()Files.list()
  • 需要文件过滤:结合 Stream API 的 filter
  • 项目中已有 Commons IO:使用 FileUtils 工具类

选择哪种方法取决于你的具体需求,如是否需要递归、是否需要过滤、是否需要处理异常等。

抱歉,评论功能暂时关闭!