【问题标题】:File Input reads only last few lines from the input file文件输入仅从输入文件中读取最后几行
【发布时间】:2019-01-06 16:06:42
【问题描述】:

这是一个从 .txt 文件中读取所有内容的简单代码。不完全确定是什么问题。我尝试使用不同的测试文件,它只读取第 2 行和第 4 行,然后是null。根据 while 循环条件,它甚至不应该读取 null

import java.io.*;
import java.util.*;

public class FileInput {

    public ArrayList<String> readFile() {
        ArrayList<String> content = new ArrayList<>();

        try {
            File file = new File("input.txt");
            BufferedReader br = new BufferedReader(new FileReader(file)); 

            String line = null;

            while (br.readLine() != null) {
                line = br.readLine();
                content.add(line);
                System.out.println(line);
            }

        } catch (FileNotFoundException e) {
            System.out.println("File could not be found. " + e.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

        return content;
    }

    public static void main(String []args) {

        FileInput fi = new FileInput();
        fi.readFile();

    }   

}

input.txt

Dangal / Aamir Khan / Fatima Sana
Sanju / Ranbir Kapoor / Dia Mirza
PK / 阿米尔汗 / Anushka Sharma
Munna Bhai MBBS / Sanjay Dutt / Arshad Warsi
Zindagi Na Milegi Dobara / Farhan Akhtar / Katrina Kaif

输出:

Sanju / Ranbir Kapoor / Dia Mirza
Munna Bhai MBBS / Sanjay Dutt / Arshad Warsi

是我做错了什么,还是在某个地方犯了一个小错误?

【问题讨论】:

  • 您每次都在 while 循环头中消耗一行而不使用它while(br.readLine()!=null)。将其更改为while ((line = br.readLine()) != null) { 并跳过循环内的readLine() 调用

标签: java file bufferedreader


【解决方案1】:

您调用br.readLine() 两次导致您在读取while-loop 中的文件时跳过几行。

将您的时间更改为如下:-

while ((line = br.readLine()) != null) {
   content.add(line);
   System.out.println(line);
}

【讨论】:

  • 从我这边看的愚蠢。在我看到你的回复的那一刻改变了这一点。欣赏它。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多