通过Java
在使用目录时的一个常见任务之一是通过目录中的所有文件和目录在指定目录。这包括子目录,可全面访问整个目录树。 In Java, there are standard approaches to achieve this functionality.
File#isDirectory():The File class in Java has a method called isDirectory() that can用于确定文件是代表目录还是文件。如果给定文件是目录,则包含一个文件和目录列表,可以使用listfiles()方法来获得。 contemive方法#listfiles() 通过目录树迭代的一种简单的方法是使用递归。以下片段演示了以下方法:
导入java.io.file; 公共类DirectoryIterator { 公共静态void main(string [] args){ 文件目录=新文件(“/path/to/dir”); showfiles(directory.listfiles()); } 公共静态void showfiles(file [] files){ 对于(文件文件:文件){ if(file.isdirectory()){ system.out.println(“目录:” file.getabsolutepath()); showfiles(file.listfiles()); //递归电话 } 别的 { system.out.println(“ file:” file.getabsolutepath()); } } } }此方法通过listfiles()返回的文件列表中的递归调用showfiles()来起作用。但是,处理stackoverflowerror异常很重要,如果目录树太深而无法处理JVM的堆栈以无法处理。
文件#walk()to tail recursion:对于Java 8及以后,一种更有效的方法是使用文件#walk()。该方法实现了尾部递归,该递归通过在方法调用堆栈而不是JVM堆栈中维护迭代的状态来避免stackoverflowerror问题。 args)抛出异常{ 路径目录= paths.get(“/path/to/dir”); files.walk(目录).foreach(路径 - > showfile(path.tofile())); } 公共静态void showfile(文件文件){ if(file.isdirectory()){ system.out.println(“目录:” file.getabsolutepath()); } 别的 { system.out.println(“ file:” file.getabsolutepath()); } } } [&&&&&&&&&&&&&&&&&&&&&& walk()生成一个表示给定目录树中文件和目录的路径对象流。然后使用foreach()方法处理每个路径对象并显示相应的文件或目录。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3