学生向けプログラミング入門

学生向けにプログラミングを解説。Java、C++、Ruby、PHP、データベース

Javaプログラミング入門その50 ファイルからの読み込み・書き込み

<<前  [TOP]


既に何度か登場していますが、ファイルからテキスト(文字列)を入出力するには、java.ioパッケージのFileReader/FileWriterを使用します。
インスタンスを生成するにはString/File/FileDescriptorを引数として与えます。


また、通常は、テキストを効率よく扱うためにBufferReader/BufferWriterを使用します。
BufferedReader/BufferedWriterは引数にReader/Writerをとります。

java.lang.Object
    +--java.io.Reader(あるいはWriter)
        +--java.io.BufferedReader(あるいはBufferedWriter)
        +--java.io.InputStreamReader(あるいはOutputStreamWriter)
            +--java.io.FileReader(あるいはFileWriter)



読み書きの準備は以下のようにすればよいですが、実際には「IOException」の例外処理が必要になります。

//読み込み準備
BufferedReader read = new BufferedReader(new FileReader("ファイル"));

 //書き込み準備
BufferedWriter writer = new BufferedWriter(new FileWriter("ファイル"));

読み込み・書き込みの具体的なメソッドはいくつもありますが、今回は読み込みではBufferedReaderのreadLine()メソッドを、書き込みではWriterクラスのwrite(String)メソッドを利用します。
読み書きいずれの処理も終了したら、ファイルはcloseしておいた方が良いでしょう。


以下のサンプルプログラムを作成してみましょう。


SwingFileText.java 直

/**
* テキストのロードとセーブ
*/

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

public class SwingFileText implements ActionListener {

	private JPanel panel;
	private JButton loadButton, saveButton;
	private JTextField textField;
	private JTextArea textArea;
	private JScrollPane sp;

	/** コンストラクタ */
	public SwingFileText() {
	
		// 画面構成
		panel = new JPanel();
		loadButton = new JButton("Load");
		saveButton = new JButton("Save");
		textField = new JTextField(10);
		panel.add(loadButton);
		panel.add(saveButton);
		panel.add(textField);

		textArea = new JTextArea("", 10, 40);	//10行*40桁
		sp = new JScrollPane(textArea);

		//イベント通知の登録
		loadButton.addActionListener(this);
		saveButton.addActionListener(this);
	}


	/** ボタンが押された時の処理 */
	public void actionPerformed(ActionEvent evt) {

		String str = evt.getActionCommand();

		if(str.equals("Load")) {

			load(textField.getText());
		}
		else if(str.equals("Save")) {
			save(textField.getText());
		}
	}

	/** 指定ファイルをロードする */
	public void load(String file) {

		try {
			String line;

			//文字列としてファイルから読み込み
			BufferedReader read = new BufferedReader(new FileReader(file));

			//JTextAreaをクリアしてから表示
			textArea.setText(null);

			//読み込んだデータをJTextAreaへ表示
			while((line = read.readLine()) != null) {
				textArea.append(line + "\n");
			}
			read.close();
		}
		catch (IOException ex) {
			System.err.println(ex);
		}
	}

	/** 指定ファイルへセーブする */
	public void save(String file) {

		try {
			//文字列としてファイルへ書き込み
			BufferedWriter write = new BufferedWriter(new FileWriter(file));

			write.write(textArea.getText());
			write.close();
		}
		catch(IOException ex) {
                        System.err.println(ex);
                }
        }

	
        /** main() */
        public static void main(String[] args) {

                SwingFileText test = new SwingFileText();

                JFrame frame = new JFrame("FileText");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().add(test.panel, "Center");      //パネルを配置
                frame.getContentPane().add(test.sp, "South");
                frame.pack();
                frame.setVisible(true);

        }
}

サンプルプログラムを実行してみましょう。
ファイルのロード、編集、セーブができます。








<<前  [TOP]