首页 > 解决方案 > 从命令行读取的第二种方法调用失败并出现 java IO 异常:流已关闭

问题描述

我连续两次调用一个方法,该方法使用 aBufferedReaderInputStreamReader从键盘读取一行输入。这是两个电话 -

    System.out.println("Enter size of array for hash table...");
    size = getInt();

    System.out.println("Enter initial number of items...");
    numInitial = getInt();

问题是 - 虽然第一个调用正常工作,但第二个调用失败并出现异常 -

Enter size of array for hash table...
12
Enter initial number of items...
java.io.IOException: Stream closed
Exception in thread "main" java.lang.NumberFormatException: null
    at java.base/java.lang.Integer.parseInt(Integer.java:620)
    at java.base/java.lang.Integer.parseInt(Integer.java:776)
    at hashing.HashTableApp.getInt(HashTableApp.java:28)
    at hashing.HashTableApp.main(HashTableApp.java:48)

这些是我的方法定义 -

public static String getString() {
    String s;
    try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) {
        s = br.readLine();
    }
    catch(IOException e) {
        s = null;
        System.out.println(e);
    }

    return s;   
}

public static int getInt() {
    String s = getString();
    return Integer.parseInt(s);
}

查看异常消息,看起来 Stream 在第一次调用后关闭getInt(),然后在getInt()尝试从命令行读取时第二次调用失败。但是,我不确定为什么会发生这种情况。通常,当尝试从已关闭的流中读取时会出现此问题,如本问题前面所述。

但是,就我而言,第一次调用关闭的流不应该影响第二次调用,因为它是一个全新的方法调用。

在某些情况下,这与我正在阅读的关于散列的书中的代码几乎相同,除了 try-with-resources 结构。

标签: javaioexceptionsystem.in

解决方案


推荐阅读