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



我正在测试扫描仪和Bufferedreader。我试图使用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"**

当您关闭扫描器时,您正在使用(System.in)提供的键盘从用户处输入两次时间,这意味着您正在关闭整个System.in。如果仍然希望关闭扫描器,请在程序末尾写入。祝你好运;)

最新更新