如何在java 7中使用新的NIO獲取文件或目錄的大小?使用Java 7獲取文件/目錄大小新的IO
回答
使用Files.size(Path)
得到一個文件的大小。
對於目錄(意爲其中包含的所有文件的大小)的大小,你仍然需要手動遞歸,據我所知。
MutableLong size = new MutableLong();
Files.walkFileTree(directoryPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
size.add(attrs.size());
}
}
這將計算目錄中所有文件的大小。但是,請注意目錄中的所有文件都需要是常規文件,因爲API指定了BasicFileAttributes的大小方法:
「非常規文件的文件大小是特定於實現的,因此未指定。
如果您栽倒在不受監管的文件,你就必須要麼不包括它的大小,或者返回一些不知名的大小。您可以檢查文件是定期與
BasicFileAttributes.isRegularFile()
不錯的答案,對於任何想知道原語的可變*類的人都是apache.commons.lang的一部分 – Nicholi
這裏是一個可以運行的例子,也將略過和日誌目錄不能進入。它使用java.util.concurrent.atomic.AtomicLong
來積累狀態。
public static void main(String[] args) throws IOException {
Path path = Paths.get("c:/");
long size = getSize(path);
System.out.println("size=" + size);
}
static long getSize(Path startPath) throws IOException {
final AtomicLong size = new AtomicLong(0);
Files.walkFileTree(startPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file,
BasicFileAttributes attrs) throws IOException {
size.addAndGet(attrs.size());
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc)
throws IOException {
// Skip folders that can't be traversed
System.out.println("skipped: " + file + "e=" + exc);
return FileVisitResult.CONTINUE;
}
});
return size.get();
}
想知道爲什麼'AtomicLong'是必須的?爲什麼不只是一個「長」?有什麼與[walkFileTree](http://docs.oracle.com/javase/7/docs/api/java/nio/file/Files.html#walkFileTree%28java.nio.file.Path,%20java。 util.Set,%20int,%20java.nio.file.FileVisitor%29)? – peterh
tbh,我只是重寫了其他答案,而不使用3pp(MutableLong)。但我認爲變量必須是「最終的」才能從內部的匿名類訪問。 AtomicLong允許的。 –
'postVisitDirectory'方法也可能被重寫。不需要在這裏標記'size'引用爲final,因爲它在內部的匿名類中不會改變。只有其內容(價值)發生了變化。一個長陣列(只有一個單元)可以用來代替AtomicLong。 – Stephan
- 1. 獲取目錄中文件的大小
- 2. 獲取目錄大小
- 3. Java文件使用BufferedInputStream讀取大文件時截斷的IO
- 4. 如何獲取目錄大小,HTML5文件API,使用webkit目錄
- 5. Java 7新的IO API - Paths.exists
- 6. 的Java獲得多個目錄中的文件夾大小[]
- 7. 的iOS - 獲取文件大小的總和目錄
- 8. OSX:獲取磁盤上文件/目錄的大小
- 9. C++:獲取的所有文件的大小當前目錄
- 10. 用Java獲取目錄中的新文件
- 11. 遞歸獲取目錄的大小
- 12. PHP - 獲取目錄的大小
- 13. 使用IO :: Event檢測目錄中的新文件
- 14. 獲取文件夾大小
- 15. 獲取上傳文件的目錄java
- 16. 如何在C#中獲取目錄大小(目錄中的文件)?
- 17. 如何獲取目錄中文件的總計大小?
- 18. 獲取目錄和子目錄中的所有.gz文件的大小 - python
- 19. java有效獲取文件大小
- 20. 如何在Windows 7上獲取目錄中所有文件(包括所有子目錄)的大小?
- 21. 獲取目錄中的最新文件
- 22. 使用FtpLib獲取文件夾大小
- 23. Java:如何:有效地獲取2GB大小的文件大小?
- 24. 從目錄和子目錄中獲取所有文件,大小,路徑php
- 25. 在java中獲取最新的文件目錄明智的
- 26. 從目錄參數中獲取文件,按大小排序
- 27. 使用java servlet 3.0文件上傳,如何獲取最大文件大小值
- 28. java:從目錄中獲取.zip文件
- 29. 獲取多個java文件目錄
- 30. Java - 從目錄中獲取文件名
有什麼不好的老路上?除非現在支持遞歸目錄大小。在那兒? – Thilo
我聽說它快了很多。我想嘗試一下。 – clamp
我不知道它是如何更快.. – Thilo