我有一个folderName.txt文件,其中包含所有文件夹路径的列表。
我如何获取该文件夹路径中存在的文件总数的总数。

对于一个路径,我能够做到这一点。

new File("folder").listFiles().length.


但是问题是我无法从folderName.txt文件读取路径。

我正在尝试这个

File objFile = objPath.toFile();
     try(BufferedReader in = new BufferedReader(
                             new FileReader(objFile))){
          String line = in.readLine();

           while(line != null){

            String[] linesFile = line.split("\n");


但是,当我尝试访问linesFile数组时,出现异常。
linesFile[1]
    线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:。

我的问题是为什么我要获取java.lang.ArrayIndexOutOfBoundsException?。
以及如何读取单个目录路径和其中的文件总数。也有办法读取子目录中的文件总数。

folderName.txt具有这样的结构。


  E:/文件夹1
  
  E:/ folder2

最佳答案

异常是因为:


  readLine()方法从输入中读取整行,但删除
  newLine字符,因此无法在\ n周围拆分


这是完全符合您要求的代码。

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


  D:\ 305
  
  D:\部署
  
  D:\ HeapDumps
  
  D:\ Program档案
  
  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:\305=4, D:\Programming=13}

编辑:这也计算子目录中存在的文件总数。

/**This counts the
         * total number of files present inside the subdirectory too.
         */
        Map<String, Integer> noOfFilesInFolder = new HashMap<String, Integer>();
        for (String pathOfFolder:foldersPath){
            int filesCount = 0;
            File[] files2 = new File(pathOfFolder).listFiles();//get the arrays of files
            for (File f2 : files2){
                if (f2.isDirectory()){
                    filesCount += new File(f2.toString()).listFiles().length;

                }
                else{
                    filesCount++;
                }
            }
            System.out.println(filesCount);
            noOfFilesInFolder.put(pathOfFolder, filesCount);
        }

        System.out.println(noOfFilesInFolder);
    }

10-08 05:42
查看更多