0

我需要读取一些数据,直到文件在不同时间打开,但我不确定指向尚未读取的数据的指针是否会自动增加?

我的方法:

//method for copy binary data from file to binaryDataBuffer
    void readcpy(String fileName, int pos, int len) {       
        try {                                              
            File lxDirectory = new File(Environment.getExternalStorageDirectory().getPath() + "/DATA/EXAMPLE/");

            File lxFile = new File(lxDirectory, (fileName);

            FileInputStream mFileInputStream = new FileInputStream(lxFile);

            mFileInputStream.read(binaryDataBuffer, pos, len);
         }  
        catch (Exception e) {
            Log.d("Exception", e.getMessage());             
        }
    }  

那么,如果我第一次调用此方法并读取并保存 5 个字节,那么下次调用该方法时会从第 5 个字节读取字节吗?阅读后我不关闭文件。

4

3 回答 3

1

当您创建一个InputStream(因为 aFileInputStream是一个InputStream)时,每次都会重新创建流,并从流的开头开始(因此是文件)。

如果您想从上次中断的地方读取,您需要保留偏移量并搜索——或保留您打开的初始输入流。

虽然您可以搜索流(使用.skip()),但无论如何不建议每次都重新打开,这很昂贵;另外,当你完成一个流时,你应该关闭它:

// with Java 7: in automatically closed
try (InputStream in = ...;) {
    // do stuff
} catch (WhateverException e) {
    // handle exception
}

// with Java 6
InputStream in = ...;
try {
    // do stuff
} catch (WhateverException e) {
    // handle exception
} finally {
    in.close();
}
于 2013-06-17T05:29:14.760 回答
0

我找到了 RandomAccessFile,它有我需要的偏移量。

于 2013-06-18T05:17:11.173 回答
0

试试这个代码:

public String getStringFromFile (String filePath) throws Exception {    
    File fl = new File(filePath);
    FileInputStream fin = new FileInputStream(fl);
    BufferedReader reader = new BufferedReader(new InputStreamReader(fin));
    StringBuilder sb = new StringBuilder();

    String line = null;
    while ((line = reader.readLine()) != null) {
        sb.append(line).append("\n");
    }
    String ret = sb.toString();

    //Make sure you close all streams.
    fin.close();  
    reader.close();

    return ret;
}
于 2013-06-17T08:25:44.523 回答