Java获取目录子目录

在Java编程中,经常需要获取目录下的所有文件及子目录。Java提供了一些API来帮助我们实现这个目标,本文将介绍如何使用Java来获取目录及其子目录下的所有文件。

File类

在Java中,可以使用java.io.File类来表示文件或目录。该类提供了一些方法来获取文件或目录的相关信息,比如文件名、文件大小、最后修改时间等。通过File类,可以创建、删除、重命名文件或目录,还可以判断文件是否存在,是否可读写等。

为了获取目录及其子目录下的所有文件,我们可以使用递归的方式,从根目录开始遍历所有的子目录和文件。下面是一个示例代码:

import java.io.File;

public class DirectoryScanner {

    public static void main(String[] args) {
        String directory = "/path/to/directory";
        File dir = new File(directory);
        scanDirectory(dir);
    }

    public static void scanDirectory(File dir) {
        if (dir.isDirectory()) {
            System.out.println("Scanning directory: " + dir.getAbsolutePath());
            File[] files = dir.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        scanDirectory(file); // 递归调用
                    } else {
                        System.out.println("Found file: " + file.getAbsolutePath());
                    }
                }
            }
        } else {
            System.out.println("Invalid directory: " + dir.getAbsolutePath());
        }
    }
}

在上面的代码中,我们通过dir.isDirectory()方法判断给定的File对象是否是一个目录。如果是目录,则使用dir.listFiles()方法获取目录下的所有文件和子目录。然后,我们遍历这些文件和子目录,如果是子目录,则递归调用scanDirectory()方法;如果是文件,则输出文件的绝对路径。

需要注意的是,listFiles()方法返回的是一个包含文件和目录的数组,可能为空。所以我们需要在使用之前进行非空判断。

示例

为了更好地理解代码的工作原理,我们假设有以下文件结构:

├── directory1
│   ├── file11.txt
│   ├── file12.txt
│   └── directory11
│       └── file111.txt
├── directory2
│   ├── file21.txt
│   └── directory21
│       ├── file211.txt
│       └── file212.txt
└── file1.txt

我们希望获取以上目录及其子目录下的所有文件。我们可以使用上面的代码来实现:

import java.io.File;

public class DirectoryScanner {

    public static void main(String[] args) {
        String directory = "/path/to/directory";
        File dir = new File(directory);
        scanDirectory(dir);
    }

    public static void scanDirectory(File dir) {
        if (dir.isDirectory()) {
            System.out.println("Scanning directory: " + dir.getAbsolutePath());
            File[] files = dir.listFiles();
            if (files != null) {
                for (File file : files) {
                    if (file.isDirectory()) {
                        scanDirectory(file); // 递归调用
                    } else {
                        System.out.println("Found file: " + file.getAbsolutePath());
                    }
                }
            }
        } else {
            System.out.println("Invalid directory: " + dir.getAbsolutePath());
        }
    }
}

运行以上代码,将输出如下信息:

Scanning directory: /path/to/directory
Found file: /path/to/directory/file1.txt
Scanning directory: /path/to/directory/directory1
Found file: /path/to/directory/directory1/file11.txt
Found file: /path/to/directory/directory1/file12.txt
Scanning directory: /path/to/directory/directory1/directory11
Found file: /path/to/directory/directory1/directory11/file111.txt
Scanning directory: /path/to/directory/directory2
Found file: /path/to/directory/directory2/file21.txt
Scanning directory: /path/to/directory/directory2/directory21
Found file: /path/to/directory/directory2/directory21/file211.txt
Found file: /path/to/directory/directory2/directory21/file212.txt

可以看到,我们成功获取了目录及其子目录下的所有文件。

总结

通过使用Java的java.io.File类,我们可以获取目录及其子目录下的所有文件。代码示例中,我们使用了递归的方式来遍历目录树,并输出