📜  显示目录中所有目录的Java程序(1)

📅  最后修改于: 2023-12-03 15:10:31.612000             🧑  作者: Mango

显示目录中所有目录的Java程序

这个Java程序可以列出目录中的所有目录。程序使用递归方法实现,也可以用Lambda表达式重构。让我们来看一下具体的代码实现。

import java.io.File;

public class ListDirectories {
    public static void main(String[] args) {
        File dir = new File("."); // 按需修改目录
        listDirectories(dir);
    }

    public static void listDirectories(File dir) {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println(file.getAbsolutePath());
                listDirectories(file);
            }
        }
    }
}

Markdown 代码片段:

​```java
import java.io.File;

public class ListDirectories {
    public static void main(String[] args) {
        File dir = new File("."); // 按需修改目录
        listDirectories(dir);
    }

    public static void listDirectories(File dir) {
        File[] files = dir.listFiles();
        for (File file : files) {
            if (file.isDirectory()) {
                System.out.println(file.getAbsolutePath());
                listDirectories(file);
            }
        }
    }
}
​```

说明:

  • 在主方法中,你需要指定你想要列出目录的位置,这里用“.”表示当前目录。
  • listDirectories 方法使用递归实现,遍历目录中的每一个文件(包括目录),如果是目录,就打印出它的绝对路径并再次递归调用这个方法。
  • 如果你想要输出目录的相对路径,可以使用 file.getName() 方法替换 file.getAbsolutePath() 方法。

更进一步,你还可以用Lambda表达式重构listDirectories方法,使它更加简洁:

public static void listDirectories(File file) {
    if (file.isDirectory()) {
        System.out.println(file.getAbsolutePath());
        File[] subDirs = file.listFiles(File::isDirectory);
        Arrays.asList(subDirs).forEach(ListDirectories::listDirectories);
    }
}

Markdown 代码片段:

​```java
public static void listDirectories(File file) {
    if (file.isDirectory()) {
        System.out.println(file.getAbsolutePath());
        File[] subDirs = file.listFiles(File::isDirectory);
        Arrays.asList(subDirs).forEach(ListDirectories::listDirectories);
    }
}
​```

说明:

  • listFiles 方法可以帮助我们找到一个目录的子目录(注意:这种方式不包括文件)。
  • Arrays.asList(subDirs)File 类型的数组转换为 List<File> 类型。
  • ListDirectories::listDirectories 实现了 Consumer<File> 方法,将递归调用传递给Lambda表达式的 forEach 方法,以递归输出每一个目录。

希望本文的代码可以对你发现和掌握递归和Lambda表达式的使用,以及在Java程序中操作目录有所协助。