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; } }