📜  java中的读取和现有目录内容(1)

📅  最后修改于: 2023-12-03 14:42:59.219000             🧑  作者: Mango

Java中读取现有目录内容

在Java中,我们可以使用File类来读取现有目录的内容。File类代表文件和目录路径名的抽象表示,它包含了多个构造函数和方法,可以让我们创建、删除、重命名和修改文件和目录。

读取目录下的文件和子目录

我们可以使用File类中的list()和listFiles()方法来读取目录下的文件和子目录。

// 读取当前目录下的文件和子目录,返回一个字符串数组
File currentDir = new File(".");
String[] files = currentDir.list();
for (String file : files) {
    System.out.println(file);
}

// 读取当前目录下的文件和子目录,返回一个File数组
File[] files = currentDir.listFiles();
for (File file : files) {
    System.out.println(file.getName());
}

以上代码分别使用了list()和listFiles()方法来读取当前目录下的文件和子目录,两个方法的差异在于,前者返回文件名字符串,而后者返回File对象。

使用过滤器读取指定类型的文件

如果我们只需要读取指定类型的文件,可以使用FileNameFilter接口和listFiles(FileFilter filter)方法。

// 读取当前目录下所有的.java文件,并输出文件名
File currentDir = new File(".");
File[] javaFiles = currentDir.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.endsWith(".java");
    }
});

for (File javaFile : javaFiles) {
    System.out.println(javaFile.getName());
}

以上代码使用了匿名内部类实现了FileNameFilter接口,并在accept()方法中过滤了所有以.java结尾的文件。

使用递归读取子目录下的文件

如果我们需要读取某个目录下的所有文件,包括子目录中的文件,可以使用递归方法来实现。

// 递归读取指定目录下的所有文件
public static void listFile(File dir) {
    File[] files = dir.listFiles();
    if (files != null && files.length > 0) {
        for (File file : files) {
            if (file.isDirectory()) {
                listFile(file);
            } else {
                System.out.println(file.getAbsolutePath());
            }
        }
    }
}

以上代码中的listFile()方法,首先读取指定目录下的所有文件和子目录,对于子目录,递归调用listFile()方法,对于文件,输出文件的绝对路径。

总结

使用File类来读取现有目录的内容是Java编程中比较常用的操作之一。我们可以使用list()和listFiles()方法来读取目录下的文件和子目录,使用FileNameFilter接口来过滤指定类型的文件,使用递归方法来读取子目录下的文件。