Android通过FileInputStream从资源中读取文件

时间:2015-05-18 15:26:57

标签: android io

我知道我可以使用AssetManager assetManager = getAssets(); InputStream is = assetManager.open(filename) 从资产中读取文件,例如

open()

InputStream方法返回FileInputStream。所以当我需要使用FileInputStream而不是它的超类时我应该怎么做。有没有办法通过InputStream实例获取{{1}}实例?

2 个答案:

答案 0 :(得分:3)

不,没有办法将任意InputStream转换回FileInputStream,因为数据源可能具有不同的性质 - 不是文字文件。

资产不是设备上的文件,而是zip文件的特定块,即.apk。 Asset API以多种方式为您提供类似文件的访问权限(特别是关于输入流),但最终不会包装单个java.io.File,而是直接从.apk提取数据的引擎

答案 1 :(得分:1)

在这种情况下,您可以创建一个StringBuilder并读取文本文件的整个内容,如下所示

StringBuilder buf=new StringBuilder();
InputStream is=getAssets().open(filename);
BufferedReader in= new BufferedReader(new InputStreamReader(is, "UTF-8"));
String str;

while ((str=in.readLine()) != null) {
     buf.append(str);
}

in.close();

注意:根据您尝试访问的文件类型,情况会有所不同;正如Chris Stratton写的那样,因为数据源可能具有不同的性质。