猿问

在递归目录树时计算目录大小

这是我在这里的第一篇文章,所以如果我做错了什么,请告诉我。此外,这是一个家庭作业。


用户选择一个目录/文件夹,我的程序递归地显示所选目录下的所有文件和子目录。该程序还将显示所有文件和子目录的大小。


我已经做了一切。该程序按预期工作。但是,我使用 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),在该部分代码中,我想开始添加该目录树下所有文件的总和,然后返回该总和,而不是 。


一只萌萌小番薯
浏览 217回答 3
3回答

PIPIONE

我能够通过在外部类的方法中创建内部类来实现这一点。在这个内部类中,我创建了一个计算目录大小的方法。我知道这并不理想,但这是一个有很多限制的家庭作业。很高兴让它工作。OuterClass --> recursionMethod() --> InnerClass --> getDirSizeMethod()类列表目录{   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); }         } }

明月笑刀无情

您可以使用另一种方法来计算大小,这也是递归的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;}

素胚勾勒不出你

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;}
随时随地看视频慕课网APP

相关分类

Java
我要回答