eclipse中的文件阅读器

时间:2016-10-08 05:14:32

标签: java string eclipse bufferedreader filereader

有谁能告诉我为什么我的代码永远不会读取我文件的第二行?如果我在文件中的第二行(例如.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);

2 个答案:

答案 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要好得多,因为它避免了每次追加时重新分配和复制整个字符串。