Java File list() 方法

Java File Java File


File.list() 是 Java 中 java.io.File 类提供的一个实例方法,用于获取指定目录下的所有文件和子目录的名称列表。这个方法对于需要遍历或处理目录内容的场景非常有用。

方法语法

public String[] list()

方法返回值

list() 方法返回一个字符串数组(String[]),包含以下内容:

  • 如果调用对象代表一个有效目录,则返回该目录下所有文件和子目录的名称
  • 如果调用对象不代表目录或发生 I/O 错误,则返回 null
  • 如果目录为空,则返回一个空数组

基本用法示例

实例

import java.io.File;

public class ListFilesExample {
    public static void main(String[] args) {
        // 创建一个代表目录的 File 对象
        File directory = new File("C:/MyFolder");
       
        // 获取目录下的文件和子目录列表
        String[] files = directory.list();
       
        // 检查是否成功获取列表
        if (files != null) {
            System.out.println("目录内容:");
            for (String file : files) {
                System.out.println(file);
            }
        } else {
            System.out.println("指定的路径不是一个目录或发生错误");
        }
    }
}

方法重载版本

File 类还提供了另一个版本的 list() 方法,可以接受一个过滤器:

实例

public String[] list(FilenameFilter filter)

FilenameFilter 接口

FilenameFilter 是一个函数式接口,只包含一个方法:

实例

boolean accept(File dir, String name)

使用过滤器示例

实例

import java.io.File;
import java.io.FilenameFilter;

public class FilteredListExample {
    public static void main(String[] args) {
        File directory = new File("C:/MyFolder");
       
        // 只列出 .txt 文件
        String[] textFiles = directory.list(new FilenameFilter() {
            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".txt");
            }
        });
       
        // Java 8+ 可以使用 Lambda 表达式简写
        String[] textFiles = directory.list((dir, name) -> name.endsWith(".txt"));
       
        if (textFiles != null) {
            System.out.println("文本文件列表:");
            for (String file : textFiles) {
                System.out.println(file);
            }
        }
    }
}

注意事项

  1. 权限问题:如果程序没有读取目录的权限,list() 方法会返回 null
  2. 符号链接list() 方法会跟随符号链接,可能返回链接指向的实际文件/目录名
  3. 性能考虑:对于包含大量文件的目录,list() 方法可能会消耗较多内存
  4. 相对路径:返回的文件名仅包含名称部分,不包含完整路径

替代方法

在 Java 7 及以上版本,推荐使用 Files 类和 DirectoryStream 来处理目录内容,它们提供了更现代和灵活的方式:

实例

import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

public class NioListExample {
    public static void main(String[] args) throws IOException {
        Path dir = Paths.get("C:/MyFolder");
       
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir)) {
            for (Path file : stream) {
                System.out.println(file.getFileName());
            }
        }
    }
}

总结

File.list() 方法是一个简单直接的目录内容获取方式,适合简单的文件系统操作。对于更复杂的需求,可以考虑使用 FilenameFilter 或转向 NIO.2 API 提供的更强大功能。

Java File Java File