一個計算文件夾大小的Java小程序

一個計算文件夾大小的Java小程序

轉載自:深度思索點擊打開鏈接

今天,在論壇上看到有人求推薦一個可以方便計算文件夾大小的軟件。原因也很簡單,畢竟每次都使用鼠標右鍵查看屬性不夠方便。其實,對於這樣的軟件是否存在,以及存在的是否好用,我並沒有關心。我忽然想到,這個功能似乎比較容易實現,於是就簡單嘗試了一下,給出了一個Java小程序,解決這個有趣的問題。
下面是源代碼:

/**
 * @file DirectorySize.java
 * A simple program to calculate the size of a directory.
 * @author Jason http://www.zhangliancheng.com
 * @date Tue Mar  8 13:59:21 CST 2011
 */
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
 
public class DirectorySize
{
    public static void main(String[] args) throws IOException
    {
        File dir = new File(".");
        long size = getSize(dir);
        System.out.println(size + " bytes");
    }
 
    /**
     * @para directory the size of which to calculate
     * @return long the size of the diretory in bytes
     */
    public static long getSize(File directory) throws IOException
    {
        File[] files = directory.listFiles();
        long size = 0;
 
        for (File f : files)
        {
            if (f.isDirectory())
                size += getSize(f);
            else
            {
                FileInputStream fis = new FileInputStream(f);
                size += fis.available();
                fis.close();
            }
        }
        return size;
    }
}


最初寫的時候,上面的34到38行只有簡簡單單的一行:

size += new FileInputStream.available();

這樣初看起來似乎沒有什麼問題,但是在當前目錄有很多文件和目錄的時候,運行就會彈出
異常,並提示open too many files,原來是忘記關閉而超過所能打開的最大數目的限制了>

修改成現在的樣子就好了,來來來,看一下運行效果吧:

$ javac DirectorySize.java
$ java DirectorySize
736286003 bytes

呵呵,比較懶啊,沒進行單位換算,單位還是比較小的字節。

這個程序不僅有這個基本功能,還帶來一點不錯的“副作用”,下面我們來驗證其運行結果。
首先,我們新建一個測試目錄,加入一些文件使之有一定大小,然後用這個程序看看目錄目前總容量:

$ java DirectorySize
2107 bytes

然後,我們打開文件管理器,右鍵看一下該目錄的屬性:
DirectorySize

我們下面再使用ls命令查看一下:

ls

很容易看出,各個文件的大小之和剛好等於上面程序的輸出結果,並且也和右鍵屬性中看到的基本一致。

接下來,使用Linux專門查看文件佔用空間大小的du命令來查看一下:

$ du --version
du (GNU coreutils) 7.4
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
Torbjörn Granlund, David MacKenzie, Paul Eggert, and
There is NO WARRANTY, to the extent permitted by law.   Written by Jim Meyering. $ du -sb
6203 .


怎麼會是六千多,爲什麼相差這麼多呢?這讓我非常的不解,又仔細看了下du的手冊頁,也沒有發現任何問題。難道du命令存在BUG?
經過簡單的搜索,我在這個鏈接裏看到,已經有人提交了這個BUG。原來如此,看來需要更新一下手頭的coreutils了。
OK,這就是我說的該程序的附加作用,意外地發現了du命令存在的BUG:)

發佈了9 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章