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

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

Java | 51 | ファイルからの読み込み・書き込み

↓↓クリックして頂けると励みになります。



50 | JTimerとJProgressBar】 << 【ホーム


ファイルからの読み込み・書き込み
ファイルからの読み込み・書き込み





既に何度か登場していますが、ファイルからテキスト(文字列)を入出力するには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しておいた方が良いでしょう。


Visual Studio Codeで以下のプログラムを作成します。


新規作成 【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);
    }
}



作成したプログラムを実行して動作を確認します。
ファイルのロード、編集、セーブができます。
ファイル名を入力してロードボタンを押せばファイルを読み込むことができます。

~/Desktop/Programming/JP $ javac SwingFileText.java 
~/Desktop/Programming/JP $ java SwingFileText  


ファイルのロードとセーブ
ファイルのロードとセーブ




50 | JTimerとJProgressBar】 << 【ホーム




↓↓クリックして頂けると励みになります。