有谁能告诉我为什么我的代码永远不会读取我文件的第二行?如果我在文件中的第二行(例如.txt文件)从一行开始并缩进该行,它将无法读取它。但如果它在一个新行并且它没有缩进,它将读取。它也读得很好。它是while循环的东西吗?
Scanner keyboard = new Scanner (System.in);
System.out.println("Input the file name");
String fileName = keyboard.nextLine();
File input = new File (fileName);
BufferedReader reader = new BufferedReader(new FileReader(input));
String content = reader.readLine();
content.replaceAll("\\s+","");
while (reader.readLine() != null) {
content = content + reader.readLine();
}
System.out.println(content);
答案 0 :(得分:0)
请参阅以下代码中的评论。
String content = reader.readLine(); //here you read a line
content.replaceAll("\\s+","");
while (reader.readLine() != null) //here you read a line (once per loop iteration)
{
content = content + reader.readLine(); //here you read a line (once per loop iteration)
}
正如您所看到的,您正在读取while循环开头的第二行,并且在继续之前检查它是否等于null。但是,您不会对该值执行任何操作,并且会丢失该值。更好的解决方案如下:
String content = ""
String input = reader.readLine();
while (input != null)
{
content = content + input;
input = reader.readLine();
}
通过将行存储在变量中并将变量检查为null来避免读取然后丢弃所有其他行的问题。
答案 1 :(得分:0)
每次拨打readLine()
时,它都会读取下一行。声明
while (reader.readLine() != null)
读取一行但不对其执行任何操作。你想要的是
String line;
StringBuilder buf;
while ( (line = reader.readLine()) != null)
{
buf.append(line);
}
content = buf.toString();
使用StringBuilder
要好得多,因为它避免了每次追加时重新分配和复制整个字符串。