通過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