我有一个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);
}