2013-03-04 61 views
2

我試圖計算Android中使用的文件存儲的總量。我使用了遞歸函數here計算的免費大小與系統統計數據有所不同

當我從SD卡的總存儲中減去這個大小時,我得到的數字與使用StatFs時Android的數值不同。

StatFs stat = new StatFs(path); 
long blockSize = stat.getBlockSize(); 
long availableBlocks = stat.getFreeBlocks(); 
return Formatter.formatFileSize(ctx, availableBlocks * blockSize); 

這不是幾個Kb的差異,而是一個16GB SD卡的最大2GB。

我檢查了幾個存儲分析應用程序在市場上存在,他們也有同樣的問題。他們說我有8.3 Gb免費,而Android一直告訴它是6Gb(這與將手機連接到我的PC時獲得的價值相同)。

我們在這裏失蹤了什麼?

+1

您是否能夠訪問整個磁盤?如果您在SD上安裝了應用程序,則您的功能可能不會將這些應用程序添加到「已用」總計中。 – Geobits 2013-03-04 13:58:52

+0

其實我正在使用Galaxy Nexus,它沒有一個正確的SD卡,而是一個模擬的。不過,我想這個原則也適用。我會嘗試紮根我的設備。 – 2013-03-04 14:01:32

+0

即使沒有生根,你甚至不能獲得SD部分的大小? – 2013-03-04 14:03:19

回答

1

如果你只在總分區大小(不是某個文件夾)有興趣,你可以使用Java的File類也:

File f = new File("/mnt/sdcard/"); 

long free = f.getFreeSpace(); 
long total = f.getTotalSpace(); 
long usable = f.getUsableSpace(); 

另外,Android的可能塊SD-應用程序和數據的一部分。

1

我用用here

遞歸函數,函數計算文件的大小包含:

剛經過的所有文件,總結它們的長度:

...但文件的大小不一定等於它在磁盤上佔用的空間量。

這不是幾個Kb的差異,而是在一個16GB的SD卡中高達2GB。

此增量應該與文件數量成比例。

+0

那麼正確的方法是什麼? – 2013-03-04 14:12:17