如何统计目录中的文件
How to count files in a directory
我正在尝试制作一种搜索方法,它采用路径,搜索其文件夹和目录,然后打印出文件。最后我还希望它打印出所有文件的数量。
这是我的代码:
public static void main(String[] args) {
search("C:\Program Files (x86)\Adobe");
}
public static void search(String folderpath){
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()){
if(element.isDirectory()){
search(element.getAbsolutePath());
}
else{
numberOfFiles++;
System.out.println(element);
}
};
System.out.println(numberOfFiles);
};
结果如下:
folder
1
2
3
folder2
1
folder3
4
5
而且它从来没有为 numberOfFiles
提出一个最终数字。
有谁知道如何阻止它为每个文件夹打印 numberOfFiles
,并在最后打印一次?
您正在计算当前文件夹中的文件数并将其存储在局部变量中。由于该方法是递归的,您只会得到当前正在检查的文件夹的文件数。
尝试返回当前文件夹中的文件数加上每个子文件夹中的文件数。然后,在客户端方法中,根据需要消费结果。
代码如下所示:
public static void main(String[] args) {
String pathToInspect = "C:\Program Files (x86)\Adobe"
int numberOfFiles = search(pathToInspect);
System.out.println("Number of files in " + pathToInspect + ": " + numberOfFiles);
}
//changed return type from void to int
public static int search(String folderpath) {
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()) {
if(element.isDirectory()) {
//add the number of files of subfolder
numberOfFiles += search(element.getAbsolutePath());
} else {
numberOfFiles++;
}
}
//return number of files found
return numberOfFiles;
}
你的方法是递归的,这是个好主意,但你不能在递归的末尾写一些东西,把它放在方法本身中(至少这样)。
因此,这是一个可能的更正。使 search
成为一种计算有多少文件的方法(直接文件,及其子目录中的文件)。
public static void main(String[] args) {
System.out.println("# of files "+search("C:\Program Files (x86)\Adobe"));
}
public static int search(String folderpath){
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()){
if (element.isDirectory()) { // count the files for this subdir
numberOfFiles += search(element.getAbsolutePath());
}
else { // one more file
numberOfFiles++;
System.out.println(element);
}
}
// return the number of files for this dir and its sub dirs
return numberOfFiles;
}
我正在尝试制作一种搜索方法,它采用路径,搜索其文件夹和目录,然后打印出文件。最后我还希望它打印出所有文件的数量。
这是我的代码:
public static void main(String[] args) {
search("C:\Program Files (x86)\Adobe");
}
public static void search(String folderpath){
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()){
if(element.isDirectory()){
search(element.getAbsolutePath());
}
else{
numberOfFiles++;
System.out.println(element);
}
};
System.out.println(numberOfFiles);
};
结果如下:
folder
1
2
3
folder2
1
folder3
4
5
而且它从来没有为 numberOfFiles
提出一个最终数字。
有谁知道如何阻止它为每个文件夹打印 numberOfFiles
,并在最后打印一次?
您正在计算当前文件夹中的文件数并将其存储在局部变量中。由于该方法是递归的,您只会得到当前正在检查的文件夹的文件数。
尝试返回当前文件夹中的文件数加上每个子文件夹中的文件数。然后,在客户端方法中,根据需要消费结果。
代码如下所示:
public static void main(String[] args) {
String pathToInspect = "C:\Program Files (x86)\Adobe"
int numberOfFiles = search(pathToInspect);
System.out.println("Number of files in " + pathToInspect + ": " + numberOfFiles);
}
//changed return type from void to int
public static int search(String folderpath) {
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()) {
if(element.isDirectory()) {
//add the number of files of subfolder
numberOfFiles += search(element.getAbsolutePath());
} else {
numberOfFiles++;
}
}
//return number of files found
return numberOfFiles;
}
你的方法是递归的,这是个好主意,但你不能在递归的末尾写一些东西,把它放在方法本身中(至少这样)。
因此,这是一个可能的更正。使 search
成为一种计算有多少文件的方法(直接文件,及其子目录中的文件)。
public static void main(String[] args) {
System.out.println("# of files "+search("C:\Program Files (x86)\Adobe"));
}
public static int search(String folderpath){
File directory = new File(folderpath);
int numberOfFiles = 0;
for (File element : directory.listFiles()){
if (element.isDirectory()) { // count the files for this subdir
numberOfFiles += search(element.getAbsolutePath());
}
else { // one more file
numberOfFiles++;
System.out.println(element);
}
}
// return the number of files for this dir and its sub dirs
return numberOfFiles;
}