解答例 - 実習課題3 - 1.テキストファイルの入出力
(実習課題3)
実習課題2のプログラムを改良しなさい。
- ファイルへの入出力に「BufferedReader」および「BufferedWriter」を使用するようにする事。
- 拡張子が「.java」のファイル以外、読み込み/保存の対象としない。
解答例
/** * JavaFilter.java * TECHSCORE Java 入出力1章 実習課題3 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.io.chapter1.exercise3; import java.io.File; import javax.swing.filechooser.FileFilter; public class JavaFilter extends FileFilter { public boolean accept(File file) { if (file != null) { //ディレクトリ判定 if (file.isDirectory()) { return true; } else { //拡張子判定 String ext = getExtension(file); if (ext != null && ext.equals("java")) { return true; } } } //trueが返らなかったとき return false; } //拡張子を取得するメソッド private String getExtension(File file) { if (file == null) { return null; } else { //ファイル名を取得 String name = file.getName(); //最後のピリオド位置を取得 int period = name.lastIndexOf('.'); if (period > 0 && period < name.length() - 1) { //拡張子を小文字で返す return name.substring(period + 1).toLowerCase(); } else { return null; } } } public String getDescription() { return "Javaファイル(*.java)"; } }
/** * SimpleEditorExample.java * TECHSCORE Java 入出力1章 実習課題3 * * Copyright (c) 2004 Four-Dimensional Data, Inc. */ package com.techscore.io.chapter1.exercise3; import java.awt.BorderLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import javax.swing.Action; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.text.DefaultEditorKit.CopyAction; import javax.swing.text.DefaultEditorKit.CutAction; import javax.swing.text.DefaultEditorKit.PasteAction; public class SimpleEditorExample extends JFrame implements ActionListener { private JTextArea textArea = new JTextArea(); //カット、コピー、ペースト用アクション private Action cutAction = new CutAction(); private Action copyAction = new CopyAction(); private Action pasteAction = new PasteAction(); private JButton open = new JButton("開く"); private JButton save = new JButton("保存"); private JButton cut = new JButton(cutAction); private JButton copy = new JButton(copyAction); private JButton paste = new JButton(pasteAction); private JFileChooser chooser = new JFileChooser(); public SimpleEditorExample() { super("簡易エディタ"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(600, 600); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); getContentPane().add(panel1, BorderLayout.NORTH); getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER); getContentPane().add(panel2, BorderLayout.SOUTH); panel1.add(open); panel1.add(save); panel2.add(cut); panel2.add(copy); panel2.add(paste); open.addActionListener(this); save.addActionListener(this); chooser.setAcceptAllFileFilterUsed(false); chooser.setFileFilter(new JavaFilter()); } //コンストラクタ public static void main(String[] args) { new SimpleEditorExample().setVisible(true); } //[開く][保存]ボタンが押されたときの処理 public void actionPerformed(ActionEvent e) { if (e.getSource().equals(open)) { openFile(); } else if (e.getSource().equals(save)) { saveFile(); } } //ファイルを開くメソッド private void openFile() { int returnVal = chooser.showOpenDialog(this); try { if (returnVal == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); FileReader fReader = new FileReader(file); BufferedReader bReader = new BufferedReader(fReader); textArea.read(bReader, null); setTitle(file.getAbsolutePath()); bReader.close(); fReader.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } //ファイルを保存するメソッド private void saveFile() { int returnVal = chooser.showSaveDialog(this); try { if (returnVal == JFileChooser.APPROVE_OPTION) { FileWriter fWriter = new FileWriter(chooser.getSelectedFile()); BufferedWriter bWriter = new BufferedWriter(fWriter); bWriter.write(textArea.getText()); bWriter.close(); fWriter.close(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }