Java ファイル処理

目次


ファイル名の取得・入力:FileDialog

新しく外部ファイルを作ったり、既存のファイルにアクセスするためファイル名を入力するには、キーボードからファイル名を入力する代わりに、ワープロを使うときに使うファイルダイアログを使うほうが間違いが少ない。Java では、FIleDialog クラスの getDIrectory, getFile メソッドを使う。次のコードを実行すると、選択した(入力した)ファイル名のフルパスが表示される。

// ファイルダイアログのインスタンスを作成
FileDialog filedlog = new FileDialog(new Frame(), "ファイル指定"); filedlog.setVisible(true); // 入力情報を取り込む
String fname = filedlog.getDirectory() + filedlog.getFile(); System.out.println(fname);

FileDialog コンストラクタの2番目の引数はタイトルバーに表示される文字列を指定する。

外部ファイルへの出力

FileWriter

外部ファイルへ書き出すには、FileWriter クラスを使う。 write メソッドにより、すべて文字列に変換されて記憶される。fnameFileDialog を使って入力したものを使う。書き込みが終わったものは close メソッドで閉じなければいけない。

	try {
		FileWriter fwrite = new FileWriter(new File(fname), true);	// true は追加出力
		for (int i = 0; i < 20; i++) {
			fwrite.write((int) (100 * Math.random()) + " ");
		}
		fwrite.write("\n\n");
		fwrite.close();
	} catch (IOException e) {
		System.out.println("エラー:" + e);
	}

ファイルがなければ新規に作成され、もし存在する場合は、2番目の引数を true にすることによって、ファイル内容を残したまま、最後に追加される(appendモード)。

BufferedWriter

大量のファイルを出力する場合は、出力バッファを利用する BufferedWriter クラスを利用すると良い。改行を出力する場合は、write("\n") とする代わりに newLine() メソッドを使う。

	try {
		BufferedWriter bwrite = new BufferedWriter(new FileWriter((new File(fname), true));
		for (int i = 0; i < 20; i++) {
			bwrite.write((int) (100 * Math.random()) + " ");
		}
		bwrite.newLine();
		bwrite.close();
	} catch (IOException e) {
		System.out.println("エラー:" + e);
	}

PrintWriter

PrintWriter を使えば、コンソール出力と同じように、print, printf println メソッドを使って成形した文字列を記録することができる。printf() メソッドで書式に従って書き込み、作業が終了したら close() メソッドを実行してファイルを閉じる。ファイル名のエラーなどの発生に備えて、try ... catch 構文の中で実行する。

	try {
		PrintWriter pwrite = new PrintWriter(new File(fname));
		for (int i = 0; i < 20; i++) {
			pwrite.printf("%5d", (int) (100 * Math.random()));
		}
		pwrite.close();
	} catch (Exception e) {
		System.out.println("エラー:" + e);
	}

PrintWriter BufferedWriter を組み合わせて効率化することも出来る。また、FileWriter を経由することで、追い書きモードで書き出すこともできる。

PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter((new File(fname), true)));
あるいは
PrintWriter pw = new PrintWriter(new BufferedWriter((new File(fname), true));

もどる

外部ファイルからの入力

FileReader

外部ファイルからデータを読み出すには、FileReader クラスを使う。read メソッドにより、一文字ずつ取り出すことが出来る。ファイルの終わりは「-1」を検出することで認識できる。fnameFileDialog を使って入力したものを使う。

	try {
		FileReader fread = new FileReader(new File(fname));
		int bt;
		while((bt = buffer.readLine()) != -1) {
			System.out.print((char)bt);
		}
		fread.close();
	} catch (Exception e){
		System.out.println("エラー:" + e);
	}

BufferedReader

まとめて読み出すために、BufferedReader クラスを利用する。readLine メソッドにより改行までの1行分を取り出すことが出来る。

	try {
		BufferedReader bread = new BufferedReader(new FileReader(new File(fname)));
		String st;
		while((st = bread.readLine()) != null) {
			System.out.println(st);
		}
		bread.close();
	} catch (Exception e){
		System.out.println("エラー:" + e);
	}

取り込んだ1行分の文字列からデータを取り出すには、String.split, Integer.parseInt, Double.parseDouble などのメソッドを必要とする。たとえば、複数のスペースで区切られた int 型データを取り出す場合の例を次に示す。

// データだけを取り出す(区切りは1個以上の空白)
	String[] sts = st.split(" +");		
// 数値候補を数値に変換する int[] dat = new int[100]; int n=0; for(int i=0; i<sts.length; i++) if(sts[i].length() > 0) dat[n++] = Integer.parseInt(sts[i]); // 先頭の空白を削除

Scanner

取り込むデータのデータ型が分かっている場合は、Scanner クラスを利用する方がコードが簡単になる。hasNext() メソッドによってファイル終わりをチェックしながら、nextInt(), nextDouble(), next() などのメソッドでデータを取得する。データはスペース、あるいはタブ区切りとする。入力データがなくなった時 close() メソッドを実行してファイルを閉じる。

数値データがカンマで区切られている場合は、useDelimiter(",") メソッドを呼ぶ。この場合、数値以外にスペースが入っていると、InputMismatchException 例外事象が発生するので注意を要する。

ファイルを扱うため、不正動作(ファイル名が違う、データの型が違う、など)対処のために try ... catch 構文の中で実行する。

	try {
		Scanner fileIN = new Scanner(new File(fname));
		while(fileIN.hasNext()) {
			System.out.print("<"+fileIN.nextInt()+"> ");
		}
		fileIN.close();
	} catch(Exception e) {
		System.out.println("エラー:" + e);
}

キーボードからの入力:Scanner

Scanner のインスタンス生成の際の引数として、ファイル名でなく、System.in を指定すればキーボードからの入力指令になる。この場合は try ... catch の中に入れなくても良い。


もどる

JAR ファイルの作り方

完成したプログラムを実行ファイルとして独立させるには、JAR形式のファイルにしておく必要がある。その手順は以下の通り。

  1. 「ファイル」→「エクスポート」メニューを選択
  2. 「エキスポート」ウィンドウでは、「エクスポート先の選択」として、「Java-JARファイル」をクリック(多分、選択されているので、そのまま)
  3. 「JARエクスポート」ウィンドウの「JARファイル仕様」では、「リソースの選択」で、「src」の中のプログラムを選択、右欄は全チェック
  4. 「エクスポート先」は保存先を「参照」ボタンを使って指定
  5. 「JARエクスポート」ウィンドウの「JARパッケージオプション」ウィンドウはそのまま
  6. 「JARエクスポート」ウィンドウの「JARマニフェスト仕様」では、「マニフェストを指定」は「マニフェストファイルを生成」にチェック(そのまま)
  7. 「エントリーポイントのクラスを指定」は「参照」ボタンを使って、適切なファイル名を選択する。

この手順を実行して生成されるアイコン(exeファイル)をダブルクリックすると、単独でアプリケーションが立ち上がる。

もどる