2011-05-18 104 views
16

我在我的資源中的原始文件夾中有一個視頻文件。我想找到文件的大小。 我有這樣一段代碼:獲取Android文件資源的大小?

Uri filePath = Uri.parse("android.resource://com.android.FileTransfer/" + R.raw.video); 
       File videoFile = new File(filePath.getPath()); 
       Log.v("LOG", "FILE SIZE "+videoFile.length()); 

但它總是給我的大小爲0。我在做什麼錯?

回答

9

您無法使用File獲取資源。使用ResourcesAssetManager獲取資源的InputStream,然後調用其上的available()方法。

像這樣:

InputStream is = context.getResources().openRawResource(R.raw.nameOfFile); 
int sizeOfInputStram = is.available(); // Get the size of the stream 
+0

非常感謝埃博..它救了我的命! – Jana 2011-07-01 05:54:19

+9

從來沒有這個問題?!這種方法應該返回'可以讀取的字節的估計數量',不一定是真正的文件大小,並且文檔明確地阻止了它的使用...... http://developer.android.com/reference/java/ io/InputStream.html#available() – psycho 2012-10-08 07:40:01

+4

那麼,文檔是指可能需要一段時間才能檢索數據的通用流,例如網絡流。在資源中,確切的大小總是已知並且可用。 – EboMike 2012-10-09 00:04:53

20

試試這個行:

InputStream ins = context.getResources().openRawResource (R.raw.video) 
int videoSize = ins.available(); 
+1

我只是愛你!!!這兩行代碼解決了7天的問題!!! Thks! ; D – Matteo 2012-08-23 09:23:23

+0

與我在@ EboMike的回答中發佈的相同的問題/評論。這樣從未有過任何問題? – psycho 2012-10-08 07:40:52

+2

openRawResource()返回的內容不是普通的'InputStream',而是'AssetInputStream'。這個子類覆蓋'available()'和_is_能夠提供可靠的信息。 – caw 2013-02-06 22:44:51

19

試試這個:

AssetFileDescriptor sampleFD = getResources().openRawResourceFd(R.raw.video); 
long size = sampleFD.getLength() 
+3

這看起來比其他答案安全得多。 – Snicolas 2013-10-08 09:25:35

+3

+1但它在很多文件類型默認情況下不起作用,因爲'aapt'壓縮它們 - 對於這裏看到的解決方案:http://stackoverflow.com/questions/19743169/how-can-i -use-openrawresourcesfd/19743170 – delicateLatticeworkFever 2013-11-02 14:56:08