Java でスキャナを閉じる
-
ユーザからの標準入力を出力した後に Java で
Scanner
を閉じる -
Java で改行文字を含む指定された文字列を出力した後に
Scanner
を閉じる -
Java でファイルの内容を読み込んだ後に
Scanner
を閉じるにはclose()
メソッドを使用する
このチュートリアルでは、Java でスキャナを閉じる方法と、それを使用するタイミングについて学習します。Scanner
クラスには、開いたスキャナを閉じるためのメソッド close()
が用意されています。たとえ明示的に close()
メソッドを呼び出さなくても、Closeable
インターフェースが呼び出されてストリームが閉じられます。スキャナを明示的に閉じるのは良い習慣です。
以下に、Scanner.close()
メソッドをいつどのように使うかを示す例を示します。
ユーザからの標準入力を出力した後に Java で Scanner
を閉じる
以下のコードでは、コンストラクタでユーザからの標準入力 System.in
を受け取る Scanner
オブジェクト in
を作成しています。メソッド nextLine()
はスキップされた入力を返します。これは空白や行区切り文字を含めて、入力の行全体を行末まで読み取ります。
入力が出力された後、Scanner
オブジェクト in
の close()
メソッドを呼び出して Scanner
を閉じる。Scanner
が閉じた後、myString2
のように in
を使いたい場合は、ストリームまたは Scanner
が閉じられているため例外が発生します。
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.print("Enter a String: ");
String mystring = in.nextLine();
System.out.println("The String you entered is: " + mystring);
in.close();
String myString2 = in.nextLine();
System.out.println(myString2);
}
}
出力:
Enter a String: the cat is white
The String you entered is: the cat is white
Exception in thread "main" java.lang.IllegalStateException: Scanner closed
at java.base/java.util.Scanner.ensureOpen(Scanner.java:1150)
at java.base/java.util.Scanner.findWithinHorizon(Scanner.java:1781)
at java.base/java.util.Scanner.nextLine(Scanner.java:1649)
at com.company.Main.main(Main.java:20)
Java で改行文字を含む指定された文字列を出力した後に Scanner
を閉じる
この例では、文字列 s
を \n
と nextLine()
を用いて行に分割します。scanner.nextLine()
は、新しい行に気づくと、新しい行に移動してそれを出力します。このようにして、出力は s
の中の 3つのサブジェクトすべて異なる行になっています。
これは、scanner
にこれ以上の改行をスキャンさせたくないために close()
メソッドを呼び出したくなる状況の一つです。
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
try {
String s = " English \n Maths \n Science ";
Scanner scanner = new Scanner(s);
System.out.println(scanner.nextLine());
System.out.println(scanner.nextLine());
System.out.println(scanner.nextLine());
scanner.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
出力:
English
Maths
Science
Java でファイルの内容を読み込んだ後に Scanner
を閉じるには close()
メソッドを使用する
ファイルを読み込んでいるときは常に Scanner
を閉じることを推奨します。これにより、使用されていない入出力ストリームが開かれないことを確実にします。次の例は、ファイルから String
を読み込み、操作が終わったら scanner
を閉じる方法を示しています。
import java.io.File;
import java.util.Scanner;
public class CloseScanner {
public static void main(String[] args) {
try {
File file = new File("/Users/john/Documents/Example.txt");
Scanner scanner = new Scanner(file);
StringBuffer sb = new StringBuffer();
while (scanner.hasNext()) {
sb.append(" " + scanner.nextLine());
}
System.out.println(sb);
scanner.close();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
出力:
Hello, You are in a text file.
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn