FileInputStream用于原始文件

时间:2016-01-18 04:31:41

标签: java android android-studio inputstream fileinputstream

我在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

2 个答案:

答案 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的代码。