SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine(コードジン) DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

作って覚えるJavaプログラミングのススメ

Java入門 (6) - テキストファイルアクセスと例外処理

作って覚えるJavaプログラミングのススメ 第6回


Swingアプリに実装する

 それでは、テキストファイルアクセスの基本が大体わかったところで、実際にアプリケーションでこれを利用してみることにしましょう。簡単な例として、Swingアプリケーションにテキストエリアとボタンを2つ用意しておき、テキストエリアのテキストを読み書きする機能を追加しておきます。

package codezine.java;

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

import javax.swing.*;

public class Sample extends JFrame 
        implements ActionListener {
    private static final long serialVersionUID = 1L;
    JLabel label;
    JTextArea area;
    JButton button1,button2;
    
    public Sample(){
        this.setSize(300,200);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // JLabelの組み込み
        label = new JLabel("not saved.");
        this.add(label,BorderLayout.NORTH);
        // JTextAreaの組み込み
        area = new JTextArea();
        JScrollPane scroll = new JScrollPane(area);
        this.add(scroll,BorderLayout.CENTER);
        // JButtonの組み込み
        button1 = new JButton("Load");
        button1.addActionListener(this);
        button2 = new JButton("Save");
        button2.addActionListener(this);
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(0,2));
        panel.add(button1);
        panel.add(button2);
        this.add(panel,BorderLayout.SOUTH);
    }

    public void actionPerformed(ActionEvent ev){
        // 「Load」ボタンの処理
        if (ev.getSource() == button1){
            JFileChooser chooser = new JFileChooser();
            int res = chooser.showOpenDialog(this);
            if (res == JFileChooser.APPROVE_OPTION){
                String fname = chooser.getSelectedFile().getAbsolutePath();
                area.setText(loadFromFile(fname));
            }
        }
        // 「Save」ボタンの処理
        if (ev.getSource() == button2){
            JFileChooser chooser = new JFileChooser();
            int res = chooser.showSaveDialog(this);
            if (res == JFileChooser.APPROVE_OPTION){
                String fname = chooser.getSelectedFile().getAbsolutePath();
                saveToFile(fname,area.getText());
            }
        }
    }
    
    // 保存用メソッド
    public void saveToFile(String f,String data){
        FileWriter writer = null;
        BufferedWriter bwriter = null;
        try {
            writer = new FileWriter(f);
            bwriter = new BufferedWriter(writer);
            bwriter.write(data);
        } catch (IOException e) {
            e.printStackTrace();
            label.setText(e.getMessage());
        } finally {
            try {
                bwriter.close();
                label.setText("保存しました。");
            } catch (IOException e) {
                e.printStackTrace();
                label.setText(e.getMessage());
            }
        }
    }
    
    // 読み込み用メソッド
    public String loadFromFile(String f){
        FileReader reader = null;
        BufferedReader breader = null;
        String loaded = "";
        try {
            reader = new FileReader(f);
            breader = new BufferedReader(reader);

            String s = null;
            while((s = breader.readLine()) != null){
                loaded += s.trim() + "\r\n";
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
            label.setText(e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            label.setText(e.getMessage());
        } finally {
            try {
                breader.close();
                label.setText("読み込みました。");
            } catch (IOException e) {
                e.printStackTrace();
                label.setText(e.getMessage());
            }
        }
        return loaded;
    }

    public static void main(String[] args) {
        Sample sample = new Sample();
        sample.setVisible(true);
    }
}
実行するとLoadとSaveの2つのボタンを持ったウインドウが現れる。
実行するとLoadとSaveの2つのボタンを持ったウインドウが現れる。

 ここでは、テキストの読み込みと保存それぞれをメソッドとして切り分けて実装してあります。また保存するファイル名はfnameという変数として用意しておき、これをチェックして保存先のファイル名を得るようにしてあります。それぞれの流れは大体同じですが、読み書きしたテキストは、ここではJTextAreaにsetText/getTextして表示するようになってます。また例外が発生した場合にも、そのメッセージをJLabelに表示するようにしてあります。

次のページ
JFileChooserでオープンダイアログを使う

この記事は参考になりましたか?

作って覚えるJavaプログラミングのススメ連載記事一覧

もっと読む

この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/2295 2008/04/10 17:08

おすすめ

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー