如何获取资源文件的路径?

3
我想使用RandomAccessFile类来访问我的应用程序中的文件。但是,该类仅接受代表文件路径的字符串。如果我将文件放在assets目录之类的地方,我该如何构造路径?我知道可以使用getAssets方法读取资源,但这些方法只返回无法寻找的InputStreams。
谢谢!

尽管这是一篇旧帖子,但这里有一个不错的解决方法:(https://dev59.com/1m7Xa4cB1Zd3GeqPoUwv)。资源文件首先从资产复制到缓存目录。然后可以使用RandomAccessFile打开它。 - Francis
3个回答

0

Android资源不是直接作为文件访问的。实际上,它们通常存储在.apk文件中,因此它们根本不是文件,只是压缩的数据。

您可以对InputStream对象进行基本操作。如果您需要更高级的功能,则可以将整个文件读入内存缓冲区或将其复制到数据分区或SD卡上的实际文件中。


0
资源的问题在于你得不到任何文件名 - 至少在Android 2.2之前是这样的。因此,实际上你不能使用RandomAccessFile类。但我认为你可以尝试使用InputStream的方法:reset()和skip(long)应该能解决问题。 :-)

跳过(skip)的问题在于它不能保证按照Java文档的方式工作,并且在跳过点之前的字节会被读入内部缓冲区,这会消耗内存。目前我将使用另一种方法,不必担心随机访问。我确实看到有人说Google可能会在未来某个时候解压.apk文件以解决这个问题。 - iterator

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”方法。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接