2011-04-13 47 views
9

我想獲取資產目錄中文件的文件大小。我看到很多例子像有沒有辦法從android資產文件夾中將文件作爲File對象打開?

InputStream myInput = appContext.getAssets().open() 

我知道我可以通過簡單的閱讀InputStream在週期確定文件大小,但我在尋找一種方式通過File object做到這一點。
所以我需要一個資產的路徑,多數民衆贊成我無法確定的事情......如何獲得這條路徑?
也嘗試通過appContext.getAssets().openFd()openNonAssetFd()AssetFileDescriptor但沒有運氣 - 得到FileNotFound或可能壓縮的異常。
順便說一下,這些openFd方法在developer.android.com上是「非常漂亮的」。


我嘗試下一個代碼:

file = new File(new URI("file:///android_asset/db/call3.db")); 
Log.i(APP_TAG, "File name: "+file.getName()); 
Log.i(APP_TAG, "File path: "+file.getPath()); 
Log.i(APP_TAG, "File length: "+file.length()); 
Log.i(APP_TAG, "File isFile: "+file.isFile()); 
Log.i(APP_TAG, "File exists: "+file.exists()); 

其輸出登錄:
12月4日至13日:10:03.413:INFO(6259):文件名:call3.db
12月4日至13日: 10:03.432:INFO(6259):文件路徑:/android_asset/db/call3.db
04-13 12:10:03.444:INFO(6259):文件長度:0
04-13 12:10:03.444 :INFO(6259):文件isFile:false
04-13 12:10:03.444:INFO(6259):文件存在:false

當然文件大小不是0它是195 584字節。

回答

5

如何獲得該路徑?

沒有路徑。你所尋求的是不可能的,對不起。

+2

好的。那麼appContext.getAssets()。openFd()/ openNonAssetFd()呢?它是什麼以及它爲什麼不起作用? – Stan 2011-04-14 06:09:50

+1

有史以來最令人心碎的答案,但確實如此。 – 2012-10-22 09:38:45

2

我不確定是否有任何方法從資產文件夾中獲取File對象,但要找出單行文件的長度,可以使用以下代碼。

AssetFileDescriptor afd = context.getAssets().openFd(fileName); 
long size = afd.getLength(); 
+4

在大多數情況下,openFd()將失敗並出現以下錯誤,因爲資產通常在被添加到APK之前進行了壓縮:java.io.FileNotFoundException:該文件不能作爲文件描述符打開;它可能是壓縮的。如果您可以重命名資產文件以使其具有其中一個不可壓縮的擴展名(如mp3),那麼在創建APK時該資產文件將不會被壓縮,並且此方法實際上可以正常工作。 – Theo 2012-12-21 01:17:17

+1

您還可以添加'android {aaptOptions {noCompress「zip_nocompression」}}'並強制aapt不要使用您的自定義擴展來壓縮資產 – 2017-04-07 12:12:58