我有一个文本文件,其中包含文件夹路径列表。
我想找到每个文件夹中有多少个带有特殊字符串的文件,即任何字符串。
对于一个路径,我可以列出文件夹中存在的所有文件,但我的问题是如何为所有路径找到它?
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);
}
提取当前代码,如果
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());
}
}
}
由于程序在目录及其子目录上执行相同的功能集。使用递归来解决问题是有意义的。在递归中,函数一次又一次地调用自身,直到处理给定基本路径下的所有目录和文件。
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());
}
}
我有一个
folderPath.txt
,其中有这样的目录列表。
D:�172
D:\部署
D:\堆转储
D:\程序文件
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}