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

