我在res/raw
中有一个名为“pack.dat
”的原始文件。
我可以使用以下代码打开InputStream
:
InputStream fis = null;
try {
fis = context.getResources().openRawResource(R.raw.pack);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
String nextLine;
int i = 0, j = 0;
while ((nextLine = br.readLine()) != null) {
if (j == 5) {
j = 0;
i++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
这是有效的,我可以从该文件中读取。
但不幸的是我需要一个FileInputStream
。当我这样做时:
FileInputStream fs = null;
Uri url = Uri.parse("android.resource://" +
context.getPackageName() + "/" + R.raw.pack);
File file = new File(url.toString());
try {
fs = new FileInputStream(file);
fs.getChannel().position(0);
fs.read(bDatensatz, 0, indexlaenge);
} catch (Exception e) {
e.printStackTrace();
}
我在
获得了“file not found
”
fs = new FileInputStream(file);
第一个示例中的 context.getResources().openRawResource(R.raw.pack)
返回InputStream
。
我可以用什么来取代FileInputStream
?
答案 0 :(得分:2)
从另一个线程复制!可能这应该可以帮到你
FileInputStream fis;
fis = openFileInput("test.txt");
StringBuffer fileContent = new StringBuffer("");
byte[] buffer = new byte[1024];
int n = 0;
while ((n = fis.read(buffer)) != -1)
{
fileContent.append(new String(buffer, 0, n));
}
答案 1 :(得分:1)
但不幸的是我需要一个FileInputStream
为什么?
我在fs = new FileInputStream(file);
中收到“找不到文件”
那是因为你试图打开一个不是文件的东西。
我可以使用什么来获取FileInputStream呢?
您需要将资源复制到本地文件(例如,使用openFileOutput()
和Java I / O)。然后,您可以打开本地文件(例如,使用openFileInput()
)并获取FileInputStream
。
或者,只需使用InputStream
,修复您正在使用的任何期望FileInputStream
的代码。