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); } }

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