libro
www.tuyano.com
初心者のためのJava SEプログラミング入門

ファイルアクセス (1/6)

作成:2010-01-14 18:55
更新:2010-01-14 18:55

■テキストファイルを読み込む

プログラミングで一番面倒なのが「ファイルの操作」でしょう。それでもVisual Basicみたいなものでは、まあファイルを開いて読み書きして閉じて…という具合に基本さえわかればなんとかなります。が、Javaの場合、基本的な概念からしっかり理解しないとなかなかうまく使えるようになりません。ちょっと今回はハードかも知れないので覚悟してくださいね。

Javaでは、外部とデータをやり取りするときには「ストリーム」と呼ばれるものを使います。ストリームとは、Java仮想マシンと外部とをつなぐパイプのようなもの、と考えればいいでしょうか。ファイルだろうがネットワーク経由でデータをやり取りする場合だろうがプリンタに印刷する時だろうが、とにかく「他とやりとりする」という時は全てストリームを使います。

問題は、やり取りする手段やデータの種類などによってストリームがたくさん用意されているってことです。これは、使いこなせるようになれば大変便利なのですが、最初の内は「一体どれをどう使えばいいのだ?」と混乱してしまうでしょう。ということで、今回はまず「テキストファイルを読み書きする」というのに必要なものだけ説明します。

テキスト関係の読み書きは「リーダー(Reader)」と「ライター(Writer)」と呼ばれる特別なストリームを使います。この中でも、基本のリーダー/ライター、ストリーム付きのものなど何種類かがあります。で、ぶっちゃけた話、「どれが正解」ってのがないんですね。要するに「Aを使ってもできるし、Bを使ってもできる」という感じなのです。Aは原始的だが細かい処理ができる、Bは高度だが大雑把、みたいな感じなので、人によって「オレはAを使ったほうがやりやすい」なんて具合にけっこうやり方に違いがあったりします。

まあ、ここでは一番基本となるものだけ説明しておくことにします。基本部分だけでも十分難しいので(笑)。

では、下のリストを見てください。…なにやら物騒なソースコードになってきましたねえ(笑)。これは、テキストファイルを読み書きするプログラムです。「Read」ボタンをクリックするとファイル読み込みのダイアログが現れ、ここでファイルを選択するるとそのファイルが読み込まれてTextAreaに表示されます。また「Write」ボタンを押すとファイル保存のダイアログが現れ、TextAreaのテキストをファイルに保存します。どちらも、テキストファイル読み書きのもっともシンプルな部分だけを実装したものと考えて下さい。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class Test10 extends Frame implements ActionListener {
	TextArea ta;
	Button b1,b2;
	
	public Test10() {
		super();
		setTitle("Hello");
		setSize(300,250);
		setLayout(null);
		
		ta = new TextArea("",5,10,TextArea.SCROLLBARS_VERTICAL_ONLY);
		ta.setBounds(25,25,250,150);
		this.add(ta);
		
		b1 = new Button("Read");
		b1.setBounds(25,200,100,25);
		b1.addActionListener(this);
		this.add(b1);
		
		b2 = new Button("Write");
		b2.setBounds(175,200,100,25);
		b2.addActionListener(this);
		this.add(b2);
	}
	
	 public static void main (String args []) {
		new Test10().setVisible(true);
	}
	
	public void actionPerformed(ActionEvent ev) {
		if (ev.getSource() == b1) {
			this.readTextFromFile();
		}
		if (ev.getSource() == b2) {
			this.writeTextToFile();
		}
	}
	
	void readTextFromFile() {
		try {
			FileDialog fd = new FileDialog(this,"Select Text File.",FileDialog.LOAD);
			fd.setVisible(true);
			String fname = fd.getDirectory() + fd.getFile();
			FileReader fr = new FileReader(fname);
			BufferedReader br = new BufferedReader(fr);
			String rdata;
			String alldata = "";
			while((rdata = br.readLine()) != null) {
				alldata += rdata;
			}
			fr.close();
			ta.setText(alldata);
		} catch(Exception e) {
			System.out.println(e);
		}
	}
	
	void writeTextToFile() {
		try {
			FileDialog fd = new FileDialog(this,"Select Text File.",FileDialog.SAVE);
			fd.setVisible(true);
			String fname = fd.getDirectory() + fd.getFile();
			FileWriter fw = new FileWriter(fname);
			fw.write(ta.getText());
			fw.close();
		} catch(Exception e) {
			System.out.println(e);
		}
	}
}

※関連コンテンツ

「初心者のためのJava SEプログラミング入門」に戻る