上次笔记重点说了FileInputStream与FileOutputStream(字节读写,以byte为单位),这两者用于处理字节文件。
类似的,应用比较广泛的还有FileReader、FileWriter(字节读写,以char为单位),BufferedReader、BufferedWriter(缓冲读写,以String为单位,构造时需要放入相应的FileReader、FileWriter)。
本文利用以上知识,写一个简易的记事本程序,具有保存与读取的功能。
package study2;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.io.*;
public class NodePad extends JFrame implements ActionListener{
JTextArea jt=null;
JMenuBar jmb=null;
JMenu jm=null;
JMenuItem save=null;
JMenuItem open=null;
public static void main(String[] args) {
// TODO Auto-generated method stub
NodePad a=new NodePad();
}
public NodePad(){
super();
jt=new JTextArea();
jmb=new JMenuBar();
jm=new JMenu("File");
jm.setMnemonic('f');
save=new JMenuItem("Save");
open=new JMenuItem("Open");
this.add(jt);
this.setJMenuBar(jmb);
jmb.add(jm);
jm.add(save);
jm.add(open);
save.addActionListener(this);
open.addActionListener(this);
save.setActionCommand("save");
open.setActionCommand("open");
this.setSize(400, 300);
this.setTitle("记事本");
this.setLocation(500, 300);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getActionCommand().equals("save")){
//保存操作
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("Save");
jfc.showSaveDialog(this);
jfc.setVisible(true);
FileWriter fr=null;
BufferedWriter bfr=null;
try {
fr=new FileWriter(jfc.getSelectedFile());
bfr=new BufferedWriter(fr);
bfr.write(jt.getText());
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
bfr.close();
fr.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
}else if(e.getActionCommand().equals("open")){
//读取操作
JFileChooser jfc=new JFileChooser();
jfc.setDialogTitle("Load");
jfc.showOpenDialog(this);
jfc.setVisible(true);
String fileName=jfc.getSelectedFile().getAbsolutePath();
FileReader fr=null;
BufferedReader bfr=null;
try {
fr = new FileReader(fileName);
bfr = new BufferedReader(fr);
String temp=new String();
jt.setText("");
while((temp=bfr.readLine())!=null){
jt.setText(jt.getText()+temp+"\r\n");
}
} catch (Exception e2) {
e2.printStackTrace();
}finally{
try {
bfr.close();
fr.close();
} catch (Exception e3) {
e3.printStackTrace();
}
}
}
}
}