我想在Java中读取一个文件,一次x个字符。然后我会用字符串做一些事情,并希望从我离开的地方继续。我该怎么办呢?
编辑:
目标文件是一个简单的文本文件。
答案 0 :(得分:7)
首先,您需要区分字节和字符。您可以一次从InputStream
读取一定数量的字节(作为最大数字;不能保证您将获得所需的所有字节)并且您可以从{{1一次多个字符(同样,最多)。
听起来你可能希望在Reader
周围使用InputStreamReader
,指定相应的字符编码,然后从InputStream
读取。如果你必须有一个完全个字符,你需要循环 - 例如:
InputStreamReader
答案 1 :(得分:0)
您是否尝试过使用BufferedReader?它定义read(char[], int, int)
几乎完全符合您的要求。也就是说,它试图填充缓冲区时递归调用read。
使用示例:
char[] chars = new char[length];
reader.read(chars,0,length);
String str = String.valueOf(chars);
文档:
public int read(char [] cbuf, int off, int len) 抛出IOException
此方法实现Reader类的相应读取方法的常规协定。作为额外的便利,它尝试通过重复调用底层流的读取方法来读取尽可能多的字符。 此迭代读取将继续,直到满足以下条件之一:
- 已阅读指定数量的字符
- 基础流的read方法返回-1,表示文件结束,或
- 基础流的ready方法返回false,表示进一步的输入请求将被阻止。
如果对基础流的第一次读取返回-1以指示文件结束,则此方法返回-1。否则,此方法返回实际读取的字符数。
最后一点很重要,因为这意味着可以阻止的流可能返回的字符数少于预期。虽然从本地文件读取时,读取器或流应始终具有可读取的字节。