【问题标题】:File Read : Getting partial Output文件读取:获取部分输出
【发布时间】:2012-02-11 18:49:43
【问题描述】:

我有以下代码从我的文件中检索数据。当我执行代码时,我知道它只给出了总行数的 50%。为什么会这样?

    public static void main(String args[]) throws IOException
    {
        int count = 1;
    try {
            FileInputStream fileInput = new FileInputStream("C:/FaceProv.log");
            DataInputStream dataInput = new DataInputStream(fileInput);
            InputStreamReader inputStr = new InputStreamReader(dataInput);
            BufferedReader bufRead = new BufferedReader(inputStr);

                while(bufRead.readLine() != null)
                {
                    System.out.println("Count "+count+" : "+bufRead.readLine());
                    count++;

                }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

【问题讨论】:

  • 修复将是字符串行; while ((line=bufRead.readLine()) != null), 删除第二个 readline。

标签: java file filestream


【解决方案1】:

你读了两次:

while(bufRead.readLine() != null) /// HERE
{
     System.out.println("Count "+count+" : "+bufRead.readLine()); // AND HERE
     count++;

}

但你只计算一次。所以你实际上是在读取整个文件,但只计算了一半的行数。

改成:

String line;
while((line = bufRead.readLine()) != null) {
     System.out.println("Count "+count+" : " + line);
     count++;
}

看看会发生什么。

【讨论】:

  • 是的,你是对的。谢谢你。但是我在控制台中得到了一些空行。例如:在输入行总行数为 100 我得到 120 或 125 行。
  • @Mayilarun 你确定吗?您向我们展示的代码几乎是不可能的。
  • @Mayilarun 可能会检查文件编码和/或行尾是否有一些虚假的 cr-lf
  • 是的,它正在发生。还有一个问题是输入文件中的一行在控制台中作为 2 行出现。是否是因为缓冲区大小之类的原因??
  • 如何找到文件的编码?通过程序我可以追踪到??
【解决方案2】:

因为

while(bufRead.readLine() != null)

丢弃它刚刚读取的行。

String myLine = null;
while ((myLine = bufRead.readLine()) != null) {
    System.out.println("Count "+count+" : " + myLine);
    ...

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 2017-01-22
    • 1970-01-01
    • 2017-08-05
    • 2019-11-21
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    相关资源
    最近更新 更多