Bal*_*usC 196
您可以File#isDirectory()用来测试给定文件(路径)是否是目录.如果是这样true,那么您只需再次使用其File#listFiles()结果调用相同的方法.这称为递归.
这是一个基本的启动示例.
public static void main(String... args) {
File[] files = new File("C:/").listFiles();
showFiles(files);
}
public static void showFiles(File[] files) {
for (File file : files) {
if (file.isDirectory()) {
System.out.println("Directory: " + file.getName());
showFiles(file.listFiles()); // Calls same method again.
} else {
System.out.println("File: " + file.getName());
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这StackOverflowError对于树比JVM的堆栈可以容纳的深度更敏感.您可能希望使用迭代方法或尾递归,但这是另一个主题;)
msa*_*ord 78
如果您使用的是Java 1.7,则可以使用java.nio.file.Files.walkFileTree(...).
例如:
public class WalkFileTreeExample {
public static void main(String[] args) {
Path p = Paths.get("/usr");
FileVisitor<Path> fv = new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
throws IOException {
System.out.println(file);
return FileVisitResult.CONTINUE;
}
};
try {
Files.walkFileTree(p, fv);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Java 8,则可以使用以下流接口java.nio.file.Files.walk(...):
public class WalkFileTreeExample {
public static void main(String[] args) {
try (Stream<Path> paths = Files.walk(Paths.get("/usr"))) {
paths.forEach(System.out::println);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Ben*_*n J 27
退房的文件实用程序在Apache的百科全书类-特别iterateFiles:
允许迭代给定目录(以及可选的子目录)中的文件.
小智 7
运用 org.apache.commons.io.FileUtils
File file = new File("F:/Lines");
Collection<File> files = FileUtils.listFiles(file, null, true);
for(File file2 : files){
System.out.println(file2.getName());
}
Run Code Online (Sandbox Code Playgroud)
如果您不想要子目录中的文件,请使用false.
对于Java 7+,还有https://docs.oracle.com/javase/7/docs/api/java/nio/file/DirectoryStream.html
从Javadoc中获取的示例:
List<Path> listSourceFiles(Path dir) throws IOException {
List<Path> result = new ArrayList<>();
try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.{c,h,cpp,hpp,java}")) {
for (Path entry: stream) {
result.add(entry);
}
} catch (DirectoryIteratorException ex) {
// I/O error encounted during the iteration, the cause is an IOException
throw ex.getCause();
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
159885 次 |
| 最近记录: |