这是代码:
File file = new File("Hello.txt");
file.createNewFile();
FileWriter write = new FileWriter(file);
BufferedWriter bufWrite = new BufferedWriter(write);
bufWrite.write("HelloWorld");
bufWrite.flush();
bufWrite.close();
FileReader read = new FileReader(file);
BufferedReader bufRead = new BufferedReader(read);
while(bufRead.read()!=-1){
System.out.println(bufRead.readLine());
}
bufRead.close();
这里的输出是elloWorld。 “他不在那里。为什么会这样? 不知道我在这里做错了什么!
答案 0 :(得分:10)
看看你的循环:
while(bufRead.read()!=-1){
System.out.println(bufRead.readLine());
}
你在循环中使用read
- 这会占用下一行的第一个字符。
您应该使用:
String line;
while ((line = bufRead.readLine()) != null) {
System.out.println(line);
}
答案 1 :(得分:10)
这是一个令人惊讶的常见问题。
当你这样做时
bufRead.read()
你实际上读过一个角色,它没有把它放回去,让你以后再读它。
最简单的解决方案是不要这样做。
File file = new File("Hello.txt");
try (PrintWriter pw = new PrintWriter(new FileWriter(file))) {
pw.println("HelloWorld"); // should have a new line
}
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
for (String line; (line = br.readLine()) != null; ) {
System.out.println(line);
}
}
答案 2 :(得分:3)
原因很简单:行
while(bufRead.read()!=-1){
从输入流中消耗一个字符。来自the documentation:
Reads a single character. This method will block until a character is available, an I/O error occurs, or the end of the stream is reached.
答案 3 :(得分:1)
bufRead.read()
读取第一个字符。
改为bufRead.ready()
。
答案 4 :(得分:1)
你已经在
读了一个角色while(bufRead.read()!=-1)
如果有多行,则会消失每一行的第一个字符!
所以使用
String line;
while ((line = bufRead.readLine()) != null) {
System.out.println(line);
}
请参阅read() readLine()