遞歸遍歷文件夾獲取所有文件的絕對路徑


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM