我需要读取一些数据,直到文件在不同时间打开,但我不确定是否自动增加了尚未读取的数据的指针?
我的方法:
//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个字节读出字节?我不会在阅读后关闭文件。
答案 0 :(得分:1)
当您创建InputStream
时(因为FileInputStream
是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();
}
答案 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,它具有我需要的偏移量。