【问题标题】:Bufferedreader doesn't read the whole line at a time?Bufferedreader 一次不会读取整行?
【发布时间】:2018-09-04 14:03:39
【问题描述】:

我正在使用BufferedReader 使用Bufferedreader.readLine() 逐行读取文本文件,但突然它没有读取整行而是只读取第一个字符串

例子:如果文本文件的第一行是:

[98.0,20.0,-65.0]  [103.0,20.0,-70.0] 5.0 [98.0,20.0,-70.0] ccw

我的代码是:

BufferedReader br = new BufferedReader(new FileReader("path" + "arcs.txt"));
String Line = br.readLine();
System.out.println(Line):

输出将是:

[98.0,20.0,-65.0]

为什么会这样?

【问题讨论】:

  • 可能是行尾问题。也许你的文件中有一个\n,你的读者不会在那个字符上换行。另一方面,BufferedReader 查找 \n\r\r\n 作为行尾。
  • 我无法重现此问题。是否有可能在您的编辑器未显示的数组之后有一些行分隔符。
  • 您可以尝试阅读第二行。如果它以“[103.0,20.0,”开头,那么在您的“第一行”中有某种行分隔符。
  • @RalfRenz 是的,我试过了,就是这样
  • 我和其他人一样了解了使用上述 sn-p 的全部内容。检查 CTRL-M 字符并尝试使用换行符打印文件内容cat -A /tmp/testing.txt

标签: java string text-files bufferedreader readline


【解决方案1】:

BufferedReader 在内部工作如下:
InputSream 或 InputFile 字符流将被缓冲,直到出现\n(换行)或\r(回车)的实例。如果没有这两个字符之一的出现,BufferedReader 就会卡在 while 循环中。这种情况的一个例外是,当输入字符流关闭时。因此,为什么它提前返回的唯一合理解释必须是,在该行的第一位之后有某种行结束符。为了确保捕获文件中的所有内容,您可以添加一个环绕的 while 循环。

示例:

// Please ignore the fact that I am using the System.in stream in this example.
try(BufferedReader br = new BufferedReader( new InputStreamReader( System.in) ))
  {

    String line;
    StringBuilder sb = new StringBuilder();
    // Read lines until null (EoF / End of File / End of Stream)
    while((line = br.readLine()) != null)
     {
       // append the line we just read to the StringBuilds buffer
       sb.append(line);
     }
    // Print the StringBuilders buffer as String.
    System.out.println(sb.toString());
  }
  catch ( IOException e )
  {
    e.printStackTrace();
    // Exception handling in general...
  }

【讨论】:

    【解决方案2】:

    缓冲区读取器的 readLine() 方法读取一个字符串,直到它到达一个行分隔符,例如 \n 或 \r。您的文本文件必须在 [98.0,20.0,-65.0] 之后有这些标记。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      • 2017-11-18
      • 2019-04-12
      • 1970-01-01
      相关资源
      最近更新 更多