📅  最后修改于: 2023-12-03 15:10:31.612000             🧑  作者: Mango
这个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程序中操作目录有所协助。