2010-09-10 127 views
3

我想使用RandomAccessFile類來訪問我的應用程序附帶的文件。但是,該類只接受一個字符串,該字符串是該文件的路徑。如果我將我的文件放置在資產目錄中,我該如何構建該文件的路徑?我知道我可以使用getAssets方法來讀取資源,但只能返回無法查找的InputStream。如何獲得資源的路徑?

謝謝!

+0

雖然這是一箇舊的帖子,這裏有一個很好的[解決方法](http://stackoverflow.com/questions/14801876/android-accessing-file-from-internal-storage-using-randomaccessfile)。 資源文件首先從資產複製到緩存目錄。從那裏它可以用一個RandomAccessFile打開。 – Francis 2013-04-17 19:51:49

回答

0

我不知道你是否只是錯過了,但我發現有很多方法可用,以字符串作爲輸入。

檢查的AssetManager你會發現類似方法的文檔:

final String[] list(String path) 
Return a String array of all the assets at the given path. 

final InputStream open(String fileName, int accessMode) 
Open an asset using an explicit access mode, returning an InputStream to read its contents. 
final InputStream open(String fileName) 
Open an asset using ACCESS_STREAMING mode. 

那麼至少有一個list方法可以使用,和兩個open方法。

0

資源問題是你沒有得到任何文件名 - 至少在Android 2.2之前。所以實際上你不能使用類RandomAccessFile。但我認爲你可以嘗試使用InputStream的方法:reset()和skip(long)應該可以做到。 :-)

+0

跳過的問題在於它不能保證工作(根據Java文檔),並且直到跳過點的字節被讀入內部緩衝區,這會消耗內存。現在我將使用另一種方法,而不用擔心隨機訪問。我確實在某個地方看到谷歌可能會在將來的某個時候解壓縮.apk文件,這可以彌補這一點。 – iterator 2010-09-16 04:09:50

0

Android資源不打算直接作爲文件訪問。實際上它們通常存儲在.apk中,所以它們根本就不是文件 - 只是壓縮數據。

您可以對InputStream對象執行基本操作。如果你需要更先進的東西,那麼你可以將整個文件讀到內存緩衝區,或者將其複製到數據分區或SD卡上的某個實際文件中。