我知道我可以使用AssetManager assetManager = getAssets();
InputStream is = assetManager.open(filename)
从资产中读取文件,例如
open()
但InputStream
方法返回FileInputStream
。所以当我需要使用FileInputStream而不是它的超类时我应该怎么做。有没有办法通过InputStream
实例获取{{1}}实例?
答案 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写的那样,因为数据源可能具有不同的性质。