java - 如何解决无限readLine while

标签 java file netbeans

我有一个程序,我使用的方法之一是计算 .txt 文件的行数并返回一个整数值。问题是当我执行它时,尽管我写了 if my line is == null while 必须停止,但 while 循环继续进行,忽略它无限获得的 null。

我不知道该怎么做才能解决这个问题。

private int sizeOfFile (File txt) {
    FileReader input = null;
    BufferedReader count = null;
    int result = 0;
    try {
        
        input = new FileReader(txt);
        count = new BufferedReader(input);
        
        while(count != null){
        String line = count.readLine();
            System.out.println(line);
        result++;
        }
        
    } catch (FileNotFoundException ex) {
       ex.printStackTrace();
    } catch (IOException ex) {
        ex.printStackTrace();
    } finally {
        try {
            input.close();
            count.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
    
    return result;
}

当它检测到空值时,它必须停止,这意味着没有更多的行,但它会继续运行。

最佳答案

当您实例化 BuffereReader 并将其分配给 count 时,count 将始终为非空,因此将满足 while 循环:

count = new BufferedReader(input); //count is holding an instance of BufferedReader.

while(count != null){ //here count is non-null and while loop is infinite and program never exits.

而是使用以下代码,其中将读取每一行并检查它是否为空,如果为空则程序将退出。:

input = new FileReader(txt);
count = new BufferedReader(input);
String line = null;
while(( line = count.readLine())!= null){ //each line is read and assigned to the String line variable.
        System.out.println(line);
        result++;
 }

如果您使用的是 JDK-1.8,您可以使用 Files API 缩短代码:

int result = 0;
try (Stream<String> stream = Files.lines(Paths.get(txt.getAbsolutePath()))) {
      //either print the lines or take the count.
      //stream.forEach(System.out::println); 
      result = (int)stream.count(); 
} catch (IOException e) {
      e.printStackTrace();
}

关于java - 如何解决无限readLine while,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53979398/

相关文章:

java - 如何将 S3Object 转换为文件并使用 try with resources 在 Java 中返回文件对象?

c++ - 如何通过用户给出的完整路径打开文件?

c - 为 C 程序设置默认 NetBeans 选项(-std=c99、-Wall)

java - 尝试将 ResultSet 打印为 PDF 文件

java - 将文本附加到特定位置的现有文件

java - 签署的 3 点之间的角度,糟糕的结果

java - 在 JSP 中嵌入 Applet

java - 将 "broken pipe"字符从 ASCII 转换为 EBCDIC 以用于 Java/旧版实现

javascript - 搜索菜单,然后从各种菜单导航到搜索到的菜单

c - FILE * 可以说文件是否为空?