如何从文本文件迭代路径列表

时间:2015-07-10 10:40:45

标签: java file recursion

我有一个文本文件,其中包含文件夹路径列表。

我想找到每个文件夹中有多少个文件,其中包含一个特殊字符串,即任何字符串。

对于一个路径,我能够列出文件夹中的所有文件,但我的问题是如何为所有路径找到它?

public static void main(String[] args) {
    List<String> result = new ArrayList<String>();
    File[] fiels = new File("D:\\html").listFiles();

    for (File file : fiels) {
        if (file.isFile()) {
            result.add(file.getName());
        }
    }

    System.out.println(result);
}

3 个答案:

答案 0 :(得分:2)

提取当前代码,如果File是目录,则调用它。

public static void main(String[] args) {

    List<String> result = new ArrayList<String>();

    File[] files = new File("D:\\html").listFiles();

    locateFiles(result, files);

    System.out.println(result);
}

private static void locateFiles(List<String> result, File[] files) {
    for (File file : files) {
        if (file.isFile()) {
            result.add(file.getName());
        } else if (file.isDirectory()) {
            locateFiles(result, file.listFiles());
        }
    }
}

答案 1 :(得分:0)

由于程序在目录及其子目录上执行相同的功能集。使用递归解决问题是有意义的。在递归中,函数一次又一次地调用自身,直到它在给定的基本路径下占用所有目录和文件。

static List<String> results = new ArrayList<String>();

public static void main(String[] args)  {
  listFiles(new File("D:\\html"));

  for (String result: results)
    System.out.println(result);
}
private static void listFiles(File dir) {
    //Get list of all files and folders in directory
    File[] files = dir.listFiles();

    //For all files and folders in directory
    for(File file: files){
        //Check if directory
        if(file.isDirectory())
            //Recursively call file list function on the new directory
            listFiles(file);
        else
           results.add(file.getAbsolutePath());        
    }        
}

答案 2 :(得分:0)

我有一个folderPath.txt,其中包含一个像这样的目录列表。

  

D:\ 305172

     

D:\ Deployment

     

D:\ HeapDumps

     

D:\ Program Files

     

d:\编程

此代码为您提供所需内容+您可以根据需要进行修改

public class Main {

public static void main(String args[]) throws IOException {

    List<String> foldersPath = new ArrayList<String>();
    File folderPathFile = new File("C:\\Users\\ankur\\Desktop\\folderPath.txt");

    /**
     * Read the folderPath.txt and get all the path and store it into
     * foldersPath List
     */
    BufferedReader reader = new BufferedReader(new FileReader(folderPathFile));
    String line = reader.readLine();
    while(line != null){
        foldersPath.add(line);
        line = reader.readLine();
    }
    reader.close();

    /**
     * Map the path(i.e Folder) to the total no of 
     * files present in that path (i.e Folder)
     */
    Map<String, Integer> noOfFilesInFolder = new HashMap<String, Integer>();
    for (String pathOfFolder:foldersPath){
        File[] files2 = new File(pathOfFolder).listFiles();//get the arrays of files
        int totalfilesCount = files2.length;//get total no of files present
        noOfFilesInFolder.put(pathOfFolder,totalfilesCount);
    }

    System.out.println(noOfFilesInFolder);
}

}

输出:

{D:\Program Files=1, D:\HeapDumps=16, D:\Deployment=48, D:\305172=4, D:\Programming=13}