在 while 循环中正确使用 BufferedReader.readLine()

2022-09-01 17:54:22

因此,我在将文本文件读取到我的程序中时遇到问题。代码如下:

try {
    InputStream fis = new FileInputStream(targetsFile);
    BufferedReader br = new BufferedReader(new InputStreamReader(fis));

    //while(br.readLine()!=null){
    for (int i = 0; i < 100; i++) {
        String[] words = br.readLine().split(" ");
        int targetX = Integer.parseInt(words[0]);
        int targetY = Integer.parseInt(words[1]);
        int targetW = Integer.parseInt(words[2]);
        int targetH = Integer.parseInt(words[3]);
        int targetHits = Integer.parseInt(words[4]);
        Target a = new Target(targetX, targetY, targetW, targetH, targetHits);
        targets.add(a);
    }
    br.close();
} catch (Exception e) {
    System.err.println("Error: Target File Cannot Be Read");
}

我正在读取的文件是 100 行参数。如果我使用for循环,它可以完美地工作。如果我使用 while 语句(在 for 循环上方注释掉的语句),它将在 50 处停止。用户有可能使用具有任意行数的文件运行程序,因此我当前的 for 循环实现将不起作用。

为什么线路停在50点?我检查了文本文件,没有任何东西会挂掉它。while(br.readLine()!=null)

当我使用 while 循环时,我没有从 try-catch 中得到任何错误,所以我很困惑。有人有什么想法吗?


答案 1

也非常全面...

try{
    InputStream fis=new FileInputStream(targetsFile);
    BufferedReader br=new BufferedReader(new InputStreamReader(fis));

    for (String line = br.readLine(); line != null; line = br.readLine()) {
       System.out.println(line);
    }

    br.close();
}
catch(Exception e){
    System.err.println("Error: Target File Cannot Be Read");
}

答案 2

您在循环中第二次调用。
因此,您每次四处走动时都会阅读行。br.readLine()


推荐