2010-09-10 129 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卡上的某个实际文件中。