BufferedReader始终重置为文件中的最后一个字符

时间:2017-04-07 12:49:54

标签: java bufferedreader

我无法在读取txt文件时将BufferedReader重置为随机点。我在文件中输入文本的示例是:number = 10;。  代码的最后一部分System.out.println((char)c);将打印出;而不是1

在这个简单的例子中,我做错了什么? 我的代码:

String filePath = "data.txt";
BufferedReader br = new BufferedReader(new FileReader(filePath));
String line = "";
int c = 0;
while ((c = br.read()) != -1) {     
    if((char)c == '1') {
        br.mark(1000);
    }
    System.out.print((char)c);
}
br.reset();
c = br.read();
System.out.println((char)c);

2 个答案:

答案 0 :(得分:0)

使用您的代码和我使用.txt作为一行创建的虚拟number=10;文件。 c = br.read()会返回0

java.io.BufferedReader.mark(int)方法标记流中的当前位置。调用reset()会将流从here重新定位到此点。

所以基本上它会在你指定为标记的字符之后打印字符。

如果您希望打印剩下的线路,可以使用:

String line = br.readLine();

如果您因某种原因想要获取1,则只需修改代码即可:

c = br.read()+1;

答案 1 :(得分:-2)

我尝试了你的代码,首先是打印' 0'就我而言。

实际上,当您reset之后1之前使用1放置光标时,1

但根据您的需要,您需要输出为mark,如果您在1之前的字符上使用r,则可以输出。

就像我想打印e所以我在while ((c = br.read()) != -1) { if((char)c == 'e') { br.mark(1000); } System.out.print((char)c); } br.reset(); c = br.read(); System.out.println((char)c); 上添加了标记,如下所示:

>>> from copy import deepcopy
>>> d1={'cardinal':['VA','OH'], 'meadowlark':['OR']}
>>> d2={'meadowlark':['WY'], 'cardinal':['VA', 'IL'], 'oriole':['MD']}
>>> 
>>> d = deepcopy(d1)
>>> for key, lst in d2.items():
...     d.setdefault(key, []).extend(lst)
... 
>>> d
{'meadowlark': ['OR', 'WY'], 'oriole': ['MD'], 'cardinal': ['VA', 'OH', 'VA', 'IL']}
>>> d1
{'meadowlark': ['OR'], 'cardinal': ['VA', 'OH']}
>>> d2
{'meadowlark': ['WY'], 'oriole': ['MD'], 'cardinal': ['VA', 'IL']}

希望事情清楚。