我需要找出目录中最大文件/文件夹的大小。我是用以下方式完成的。
private static Long getSizeofLargestFile(String theRootFolder)
{
Long aLargestFileSize = 0L;
File aRootDir = new File(theRootFolder);
for (File aFile : aRootDir.listFiles())
{
if (aLargestFileSize < aFile.length())
{
aLargestFileSize = aFile.length();
}
}
return aLargestFileSize / (1024 * 1024);
}
有没有比这更好的方法?
答案 0 :(得分:6)
不是真的..你必须得到所有文件的大小以找到最大的,这就是你正在做的。
我唯一建议的是回报中的分歧。如果最大文件小于1 MB,则您的方法将返回0!
答案 1 :(得分:4)
我会说而不是
return aLargestFileSize / (1024 * 1024);
跟着
return aLargestFileSize;
我会在一段时间内写下原因......
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args)
{
Long aLargestFileSize1 = (1024*1024)+2 + 0L;
Long aLargestFileSize2 = (1024*1024)+ 0L;
System.out.println("aLargestFileSize1 final is " + aLargestFileSize1/ (1024 * 1024));
System.out.println("aLargestFileSize2 final is " + aLargestFileSize2/ (1024 * 1024));
System.out.println("aLargestFileSize1 new is " + aLargestFileSize1);
System.out.println("aLargestFileSize2 new is " + aLargestFileSize2);
}
}
如果你看到输出都给出了1.但如果你有System.out.println("aLargestFileSize1 final is " + aLargestFileSize1);
,那么输出就是,
aLargestFileSize1 new is 1048578
aLargestFileSize2 new is 1048576
表示第一个文件较大。
所以,只需使用实际数字作为回报。
答案 2 :(得分:2)
我看到了很多问题:
0
?考虑-1
。0
或-1
(请参阅下一点)File
而不是大小以消除歧义。如果你不喜欢使用外部库,Commons IO有很多正确的方法可以使用SizeFileComparator和朋友做你想做的事。
你可能想要使用Commons IO的另一个原因(除了犯1024 * 1024
舍入问题之外的错误)是我相信最新的将利用更新的JVM功能,它还提供递归目录大小(即最大的文件可能是另一个目录。)
如果您不想使用该库,我建议您至少查看其code以了解如何操作。
答案 3 :(得分:1)
Java 7提供了新的java.nio。*类,包括FileVisitor: http://docs.oracle.com/javase/tutorial/essential/io/walk.html
我已经使用过它们,但我不能说,哪种解决方案更好。 在我看来,你应该保留你的解决方案,因为最好阅读。
答案 4 :(得分:0)
这对我来说很好,有一些可能的改进。
首先,您似乎对浏览子目录不感兴趣。如果确实如此,我会将FileFilter
传递给listFiles
- 这样您就可以轻松过滤掉isFile()
方法返回false
的所有实例。
其次,我不会将返回值除以1024 * 1024.返回字节数,让调用者自己进行转换。原因是如果没有文件大于1024 * 1024字节,您的方法将返回0。