获取文件夹或文件的大小

获取文件夹或文件的大小

如何在Java中检索文件夹或文件的大小?



白板的微信
浏览 972回答 3
3回答

杨__羊羊

java.io.File file = new java.io.File("myfile.txt");file.length();这将返回文件的长度(以字节为单位)或0文件是否不存在。没有内置的方法来获取文件夹的大小,您将不得不递归地遍历目录树(使用listFiles()表示目录的文件对象的方法)并为自己累积目录大小:public static long folderSize(File directory) {     long length = 0;     for (File file : directory.listFiles()) {         if (file.isFile())             length += file.length();         else             length += folderSize(file);     }     return length;}警告:此方法对于生产用途而言不够稳健。directory.listFiles()可以返回null并引起NullPointerException。此外,它不考虑符号链接,可能还有其他失败模式。使用此方法。

尚方宝剑之说

使用java-7 nio api,计算文件夹大小可以更快地完成。这是一个准备好运行的示例,它是健壮的,不会抛出异常。它将记录它无法输入或无法遍历的目录。符号链接被忽略,并且目录的并发修改不会导致比必要更多的麻烦。/** &nbsp;*&nbsp;Attempts&nbsp;to&nbsp;calculate&nbsp;the&nbsp;size&nbsp;of&nbsp;a&nbsp;file&nbsp;or&nbsp;directory. &nbsp;*&nbsp; &nbsp;*&nbsp;<p> &nbsp;*&nbsp;Since&nbsp;the&nbsp;operation&nbsp;is&nbsp;non-atomic,&nbsp;the&nbsp;returned&nbsp;value&nbsp;may&nbsp;be&nbsp;inaccurate. &nbsp;*&nbsp;However,&nbsp;this&nbsp;method&nbsp;is&nbsp;quick&nbsp;and&nbsp;does&nbsp;its&nbsp;best. &nbsp;*/public&nbsp;static&nbsp;long&nbsp;size(Path&nbsp;path)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;final&nbsp;AtomicLong&nbsp;size&nbsp;=&nbsp;new&nbsp;AtomicLong(0); &nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Files.walkFileTree(path,&nbsp;new&nbsp;SimpleFileVisitor<Path>()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;FileVisitResult&nbsp;visitFile(Path&nbsp;file,&nbsp;BasicFileAttributes&nbsp;attrs)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;size.addAndGet(attrs.size()); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FileVisitResult.CONTINUE; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;FileVisitResult&nbsp;visitFileFailed(Path&nbsp;file,&nbsp;IOException&nbsp;exc)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("skipped:&nbsp;"&nbsp;+&nbsp;file&nbsp;+&nbsp;"&nbsp;("&nbsp;+&nbsp;exc&nbsp;+&nbsp;")"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Skip&nbsp;folders&nbsp;that&nbsp;can't&nbsp;be&nbsp;traversed &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FileVisitResult.CONTINUE; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@Override &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;FileVisitResult&nbsp;postVisitDirectory(Path&nbsp;dir,&nbsp;IOException&nbsp;exc)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(exc&nbsp;!=&nbsp;null) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("had&nbsp;trouble&nbsp;traversing:&nbsp;"&nbsp;+&nbsp;dir&nbsp;+&nbsp;"&nbsp;("&nbsp;+&nbsp;exc&nbsp;+&nbsp;")"); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Ignore&nbsp;errors&nbsp;traversing&nbsp;a&nbsp;folder &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;FileVisitResult.CONTINUE; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;AssertionError("walkFileTree&nbsp;will&nbsp;not&nbsp;throw&nbsp;IOException&nbsp;if&nbsp;the&nbsp;FileVisitor&nbsp;does&nbsp;not"); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;size.get();}

繁星coding

你需要FileUtils#sizeOfDirectory(File)从commons-io。请注意,您需要手动检查文件是否是目录,因为如果向其传递非目录,该方法将引发异常。警告:此方法(从commons-io 2.4开始)有一个错误,IllegalArgumentException如果同时修改目录,则可能抛出该错误。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java