从文件中读取字节?

时间:2013-06-17 05:26:29

标签: java android

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

我的方法:

//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个字节读出字节?我不会在阅读后关闭文件。

3 个答案:

答案 0 :(得分:1)

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

如果你想从最后一次离开的地方读取,你需要保留偏移并寻找 - 或保留你打开的初始输入流。

虽然您可以搜索到一个流(使用.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();
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

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