如何从java中的路径获取目录和子目录中的文件数?

时间:2015-07-11 14:25:26

标签: java arrays file readline

我有一个sFile = Cells(ActiveCell.Row, ActiveCell.Column + 2).Value If UCase$(Mid$(sFile, InStrRev(sFile, ".") + 1)) = "DOCX" Then Select Case MsgBox("View before saving?", vbYesNoCancel Or vbQuestion, "Save or View?") Case vbCancel: Exit Sub Case vbYes: With CreateObject("Word.Application") .Visible = True .Documents.Open sFile .Activate End With Exit Sub End Select End If 文件,其中包含所有文件夹路径的列表。 如何获得该文件夹路径中存在的文件总数的总计数。

对于一条路,我可以这样做。

folderName.txt

但问题是我无法从new File("folder").listFiles().length. 文件中读取路径。

我正在尝试这个

folderName.txt

但是当我试图访问linesFile数组时,我得到了一个异常。 像File objFile = objPath.toFile(); try(BufferedReader in = new BufferedReader( new FileReader(objFile))){ String line = in.readLine(); while(line != null){ String[] linesFile = line.split("\n");     线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:。

我的问题是为什么我得到java.lang.ArrayIndexOutOfBoundsException? 我怎么能读取单个目录路径和其中的文件总数。有没有办法读取子目录中的文件总数。

folderName.txt有这样的结构。

  

E:/ folder1中

     

E:/文件夹2

1 个答案:

答案 0 :(得分:2)

例外原因是:

  

readLine()方法从输入中读取整行但删除了   来自它的newLine字符。因此它无法拆分\ n

这是完全符合你想要的代码。

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

  

D:\ 305

     

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:\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);
    }