IO流讀取文件夾大小

IO流讀取文件夾大小的源碼

package cn.tedu.file; import java.io.File; import
java.math.BigDecimal; import java.util.Scanner; //遞歸求目錄總大小的測試 public
class Test2_Size { @SuppressWarnings(“resource”) public static void
main(String[] args) { // 1,接收用戶輸入的目錄 System.out.print(“目錄:”);
String path = new Scanner(System.in).nextLine(); File dir = new
File(path); // System.out.printl## 標題n(“大小:” + size(dir));
//爲了防止浮點數精確度丟失,我們就要用到BigDecimal工具包 BigDecimal bigDecimal1 = new BigDecimal(size(dir) + “”); BigDecimal bigDecimal2 = new
BigDecimal(1073741824 + “”); BigDecimal bigDecimal3 =
bigDecimal1.divide(bigDecimal2, 3, BigDecimal.ROUND_HALF_UP);
System.out.println(“大小:” + bigDecimal3 + “G”);
System.out.println(“文件個數:” + countFileSize(dir));
System.out.println(“文件夾個數:” + countFolderSize(dir)); }

private static long countFolderSize(File dir) {
int size = 0;
// 獲得目錄中的所有內容
File[] files = dir.listFiles();
// 遍歷
for (File f : files) {
if (f.isDirectory()) {
// 文件夾則加一
size++;
// 進入該目錄,統計目錄中文件夾的數量
// 注意不能只寫countFileSize(f),這樣每層都有一個新的size
size += countFolderSize(f);
}
}
return size;
}

// 創建size() ,求大小
private static long size(File dir) {
// 1,列出文件夾下面的所有資源
File[] fs = dir.listFiles();
// 1.1,我們需要獲取每個File對象,就需要遍歷fs數組
long count = 0;// 定義變量,記錄總和
for (int i = 0; i < fs.length; i++) {
File file = fs[i]; // 表示當前遍歷得到的資源
// --2,判斷如果資源是文件,把文件的字節量求和length()
if (file.isFile()) {// 是文件
count = count + file.length();// 求和?
} else if (file.isDirectory()) {// 是文件夾
// --3,判斷如果資源是文件夾,繼續列表,繼續判斷,如果是文件求和如果是文件夾繼續列表繼續判斷…開始重複的幹
count = count + size(file);// 遞歸??因爲乾的活兒和size()一樣了…
}
}
return count;
}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章