Java でスキャナを閉じる

Rupam Yadav 2023年10月12日
  1. ユーザからの標準入力を出力した後に Java で Scanner を閉じる
  2. Java で改行文字を含む指定された文字列を出力した後に Scanner を閉じる
  3. Java でファイルの内容を読み込んだ後に Scanner を閉じるには close() メソッドを使用する
Java でスキャナを閉じる

このチュートリアルでは、Java でスキャナを閉じる方法と、それを使用するタイミングについて学習します。Scanner クラスには、開いたスキャナを閉じるためのメソッド close() が用意されています。たとえ明示的に close() メソッドを呼び出さなくても、Closeable インターフェースが呼び出されてストリームが閉じられます。スキャナを明示的に閉じるのは良い習慣です。

以下に、Scanner.close() メソッドをいつどのように使うかを示す例を示します。

ユーザからの標準入力を出力した後に Java で Scanner を閉じる

以下のコードでは、コンストラクタでユーザからの標準入力 System.in を受け取る Scanner オブジェクト in を作成しています。メソッド nextLine() はスキップされた入力を返します。これは空白や行区切り文字を含めて、入力の行全体を行末まで読み取ります。

入力が出力された後、Scanner オブジェクト inclose() メソッドを呼び出して 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\nnextLine() を用いて行に分割します。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 Yadav
Rupam Yadav avatar Rupam Yadav avatar

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

関連記事 - Java Scanner