目标:
学习java的IO流和文件的打开保存
内容:
使用javaSwing包里面的一些东西,比如按钮、菜单来进行布局
代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
package myNotePad; import java.awt.FileDialog; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.beans.FeatureDescriptor; 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.JFrame; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JTextArea; public class MyNotePad { public static void main(String[] args) { final JFrame jFrame = new JFrame("记事本"); JMenuBar jMenuBar = new JMenuBar(); jFrame.setJMenuBar(jMenuBar); // 注意!此处把菜单栏加到框架里面不是调用add方法(卡了40分钟,屏幕不显示窗体) JMenu jMenu1 = new JMenu("文件"); JMenu jMenu2= new JMenu("编辑"); jMenuBar.add(jMenu1); //add方法作用是把一个组件添加到另一个组件中。 jMenuBar.add(jMenu2); JMenuItem jMenuItem1 = new JMenuItem("打开"); JMenuItem jMenuItem2 = new JMenuItem("保存"); jMenu1.add(jMenuItem1); jMenu1.add(jMenuItem2); final JTextArea jTextArea = new JTextArea(); jFrame.add(jTextArea); //上面是框架创建完毕 //下面是给"打开"操作写上事件监听器 jMenuItem1.addActionListener(new ActionListener() { //这样写是创建匿名时间监听器对像,也可以自己写一个事件监听器类 @Override public void actionPerformed(ActionEvent e) { FileDialog fileDialog = new FileDialog(jFrame, "打开",FileDialog.LOAD); fileDialog.setVisible(true); //注意,文件对话框默认是隐藏的(卡了10分钟,不显示对话框) FileReader fileReader=null; try { fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile()); //注意:获取文件是 路径名getDirectory()+文件名getFile()!!切记getFile()里不包含路径名 (卡了90分钟,下载别人源码才明白) } catch (FileNotFoundException e2) { e2.printStackTrace(); } if(fileReader!=null){ try( //7.0版本JDK支持try(){}语法,作用:()内写创建输入输出对象后,就不用在finally中写关闭资源close()方法。 BufferedReader bufferedReader = new BufferedReader(fileReader); ) { if(fileDialog.getFile()!=null){ fileReader = new FileReader(fileDialog.getDirectory()+fileDialog.getFile()); String str=null; while((str=bufferedReader.readLine())!=null){ //把读文件写在while里是为了第一次就能判断 jTextArea.append(str); } } } catch (IOException e1) { } } } }); //下面是给"保存"操作写上事件监听器 jMenuItem2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { FileDialog fileDialog = new FileDialog(jFrame, "保存", FileDialog.SAVE); fileDialog.setVisible(true); FileWriter fileWriter=null; try { fileWriter = new FileWriter(fileDialog.getDirectory()+fileDialog.getFile(),true); //上一句代码用到了追加功能,防止再次写入覆盖原来的内容FileWriter(String fileName, boolean append)(卡了3分钟) } catch (IOException e2) { e2.printStackTrace(); } if(fileWriter!=null){ try (BufferedWriter bf=new BufferedWriter(fileWriter)) { String text = jTextArea.getText(); // char[] charArray = text.toCharArray(); bf.write(text); } catch (IOException e1) { e1.printStackTrace(); } } } }); jFrame.setSize(400, 400); jFrame.setLocation(600, 300); jFrame.setVisible(true); } }
运行:
思考和总结:
对事件的监听有了更深的了解