import java.io.File; import java.util.HashSet; import java.util.Set; /** * 遞歸獲取所有文件並打印以".txt"格式結尾的文件絕對路徑 * @author Lyle * @date 2020/8/26 */ public class FileRecursion { //使用全局變量保存所有文件路徑 static Set<String> filePaths=new HashSet<>(); public static void main(String[] args) { File file=new File("E:\\diguiTest"); Set<String> filePath = getFilePath(file); if (filePath.size()>0){ for (String fileStr : filePath) { if (fileStr.contains(".txt")){ System.out.println(fileStr); } } } } public static Set<String> getFilePath(File file){ File[] files = file.listFiles(); if (files==null||files.length==0){ return new HashSet<>(); } for (File file1 : files) { if (file1.isDirectory()){ //遞歸調用 getFilePath(file1); }else { //保存文件路徑到集合中 filePaths.add(file1.getAbsolutePath()); } } return filePaths; } }
以上的做法,可以實現功能,但是使用了全局變量,一般的做法中避免使用全局變量,因此可以將全局變量作為參數傳進遞歸調用的方法中,優化后的代碼如下:
import java.io.File; import java.util.HashSet; import java.util.Set; /** * 遞歸獲取所有文件並打印以".txt"格式結尾的文件絕對路徑 * @author Lyle * @date 2020/8/26 */ public class FileRecursion { public static void main(String[] args) { Set<String> filePaths=new HashSet<>(); File file=new File("E:\\diguiTest"); Set<String> filePath = getFilePath(file,filePaths); if (filePath.size()>0){ for (String fileStr : filePath) { if (fileStr.contains(".txt")){ System.out.println(fileStr); } } } } public static Set<String> getFilePath(File file, Set<String> filePaths){ File[] files = file.listFiles(); if (files==null||files.length==0){ return new HashSet<>(); } for (File file1 : files) { if (file1.isDirectory()){ //遞歸調用 getFilePath(file1, filePaths); }else { //保存文件路徑到集合中 filePaths.add(file1.getAbsolutePath()); } } return filePaths; } }