我可以在使用扫描仪后使用 bufferedreader 吗?

Can I use bufferedreader after using scanner?

我正在测试 Scanner 和 Bufferedreader。我尝试在使用 Scanner 后使用 BufferedReader。

但是,如果我关闭扫描仪,就会发生错误。为什么会出现错误?

我试过谷歌搜索,但我不明白。

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Scanner;

public class ScannerAndBufferedReaderTest2 {

    public static void main(String[] args) throws IOException {
        
        // Scanner
        Scanner sc = new Scanner(System.in);
        
        System.out.print("Enter number : ");
        int in1 = sc.nextInt();
        sc.close(); // <-- If I erase this part, there will be no error.
        
        System.out.println("Your number : " + in1);
        
        // BufferedReader
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        
        bw.write("Enter number: ");
        bw.flush();
        int in2 = Integer.parseInt(br.readLine());
        br.close();
        
        bw.write("Your number : " + String.valueOf(in2));
        bw.flush();
        bw.close();
        
    }

}

/* Error

Exception in thread "main" java.io.IOException: Stream closed
    at java.base/java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:176)
    at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:342)
    at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:284)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:326)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:181)
    at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
    at test.Test2.main(Test2.java:27)

*/
Scanner sc = new Scanner(System.in);  //" 1st time "
    
    System.out.print("Enter number : ");
    int in1 = sc.nextInt();
    sc.close(); // <-- If I erase this part, there will be no error.
    
    System.out.println("Your number : " + in1);
    
    // BufferedReader
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  //"2nd time"
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    
    bw.write("Enter number: ");
    bw.flush();
    int in2 = Integer.parseInt(br.readLine());
    br.close();
    
    bw.write("Your number : " + String.valueOf(in2));
    bw.flush();
    bw.close();
    sc.close(); // **"close your scanner over here"**

您在关闭 Scanner 时正在使用 (System.in) 提供的键盘从用户那里获取两次输入,这意味着您正在关闭整个 System.in。如果您仍想关闭扫描仪,请在程序结束时写入。 祝你好运 ;)