目次へ

解答例 - 実習課題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();
        }
    }
}
    

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp