这是我在这里的第一篇文章,因此,如果我做错任何事情,请告诉我。 另外,这是一项作业。
用户选择目录/文件夹,我的程序递归显示所选目录下的所有文件和子目录。该程序还将显示所有文件和子目录的大小。
我已经做了一切。该程序将按预期工作。但是,我使用了apache.commons.io中的FileUtils方法来获取目录的大小,但是显然我不允许这样做。
我不能使用apache.commons.io。
我不能使用Java nio软件包。
我无法创建另一个计算目录大小的方法(单独的方法)。这就是让它变得困难的原因。
我已经有一个递归,它获取所有文件和子目录的名称。我正在考虑向该递归算法中添加一些内容,这将为我提供每个目录下所有文件的总和,但是我只是不知道该怎么做。
有人有可以帮助您的想法吗?
private void recurseDirectory(File f) {
if (f.isFile()) {
show f.getAbsPath() and f.length() on GUI }
else if (f.isDirectory()) {
show f.getAbsPath() and FileUtils.sizeOfDirectory(f) on GUI }
File[] files = f.listFiles();
for (File file : files) {
recurseDirectory(file); }
}
因此,我不想在代码的那部分中使用FileUtils.sizeOfDirectory(f)
,而是开始在该目录树下添加所有文件的总和,然后将其返回。
答案 0 :(得分:0)
您可以使用另一种方法来计算大小,这也是递归的
private void recurseDirectory(File file) {
System.out.println(file.getAbsolutePath() + " - " + size(file));
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
recurseDirectory(f);
}
}
}
private long size(File file) {
if(file.isFile()){
return file.length();
} else if(file.isDirectory()){
long size = 0;
File[] files = file.listFiles();
for (File f : files) {
size += size(f);
}
return size;
}
return 0;
}
答案 1 :(得分:0)
我能够通过在外部类的方法内部创建内部类来实现此目的。在这个内部类的内部,我创建了一个计算目录大小的方法。我知道这并不理想,但这是一项有大量限制的作业。很高兴让它正常工作。
OuterClass-> recursionMethod()-> InnerClass-> getDirSizeMethod()
Class ListDirectory {
private void recurseDirectory(File f) {
class InnerClass {
private long recurseFolder(File f) {
long folderLength = 0;
File[] files = f.listFiles();
for (File file : files) {
if (file.isFile())
{ folderLength += file.length(); }
else if (f.isDirectory())
{ folderLength += recurseFolder(file); }
}
return folderLength;
}
}
if (f.isFile())
{ show f.getAbsolutePath() and f.length() on GUI }
else if (f.isDirectory()) {
InnerClass inner = new InnerClass();
long dirSize = inner.recurseFolder(f);
show f.getAbsolutePath() and FileUtils.sizeOfDirectory(f) on GUI }
File[] files = f.listFiles();
for (File file : files)
{ recurseDirectory(file); }
}
}
答案 2 :(得分:0)
private long recurseDirectory(File file) {
if(file.isFile()){
System.out.println(file.getAbsolutePath() + " - " + file.length());
return file.length();
} else if (file.isDirectory()) {
long size = 0;
File[] files = file.listFiles();
for (File f : files) {
size += recurseDirectory(f);
}
System.out.println(file.getAbsolutePath() + " - " + size);
return size;
}
return 0;
}