東大ニート

東大卒のニートが勉強したことをメモするブログ

<Java> Scannerクラスの使い方(その2:File編)

Scannerクラスの使い方(その1:基本編)ではプログラミングコンテストを解く際に使用するScannerクラスの基本について書きました。

今回はScannerクラスを使って、ファイルの読み込みを行う方法を書いてみます。

ファイルの読み込みができれば、提出する前に自分でテストを行うことができて便利です。

JavaDriveさんの以下の記事がわかりやすかったので、参考にさせていただきました。

www.javadrive.jp

 

入力例とコードの完成形

まずは入力例。
test.txtというファイルに以下のように2つの数字が入力されていて、2つの数字の合計値を出力するとします。

1 2

続いてコードの完成形。
このtest.txtファイルのパスが /Users/Owner/Documents/test.txt だとすると、コードは以下のようになります。

  1. import java.util.Scanner;

  2. import java.io.File;

  3. import java.io.FileNotFoundException;

  4.  

  5. public class Main {

  6.        public static void main(String[] args) {

  7.               try{

  8.                      File f = new File("/Users/Owner/Documents/test.txt");

  9.                      Scanner sc = new Scanner(f);

  10.                      int a = sc.nextInt();

  11.                      int b = sc.nextInt();

  12.                      System.out.println(a+b);

  13.               }catch(FileNotFoundException e){

  14.                      System.out.println(e);

  15.               }

  16.        }

  17. }

ポイント1. FileクラスとFileNotFoundExceptionクラスのインポート(2・3行目)

Fileの読み込みを行う時はFileクラスを使用します。また、ソースが見つからない時の例外処理を行うために、FileNotFoundExceptiionクラスを使用します。

どちらもjava.ioパッケージに含まれるため、「import java.io.File;」と「import java.io.FileNotFoundExceptiion;」を記述します。

両方まとめて、「import java.io.*;」でも大丈夫です。

 

ポイント2. Fileインスタンスの作成とソースファイルの指定(8行目)

まず、Fileインスタンスを作成し、ソースファイルの情報をFileインスタンスに渡します。

新しくFileインスタンス「f」を作成する場合、「File f = new File();」と記述すればよいです。右辺の引数にソースファイルのパスを入力することで、読み込むソースファイルを指定します。

続いてソースファイルの指定方法ですが、絶対パスと相対パスの2種類の方法があります。

絶対パスの場合、対象ファイルの絶対パスをダブルクオテーション「"」で囲みます。例えば「File f = new File("/Users/Owner/Documents/test.txt");」のように記述します。

相対パスの場合、対象となるプログラムが格納されているフォルダからの相対パスを記述します。例えば「/workspace/test01/src/package/」ディレクトリに対象のjavaファイルが格納されている場合、「/workspace/test01/」からの相対パスを記述します。

そのため、「/workspace/test01/」に対象ファイル「test.text」が格納されている場合、「File f = new File("test.txt");」と記述します。

これで、ソースファイルの全入力情報がインスタンス「f」に渡されます。

 

ポイント3. Scannerインスタンスの作成(9行目)

最後にScannerインスタンスを作成し、Fileインスタンス「f」を引数として渡します。

記述は「Scanner sc = new Scanner(f);」のようになります。

これでScannerインスタンス「sc」にソースファイルの全入力情報が渡されます。

あとは通常のScannerクラスを使用した入力処理と同様に、「next」メソッドや「nextInt」メソッドを使用して、1つ1つの入力情報を取得します。

 

「hasNext()」や「try - catch」についてはまた今度記載します。