实现打开与保存的记事本
1 package com.tanzhou.notepad.util;
2
3 import java.awt.Color;
4 import java.awt.event.ActionEvent;
5 import java.awt.event.ActionListener;
6 import java.io.BufferedReader;
7 import java.io.BufferedWriter;
8 import java.io.FileReader;
9 import java.io.FileWriter;
10 import java.io.IOException;
11
12 import javax.swing.JFileChooser;
13 import javax.swing.JFrame;
14 import javax.swing.JMenu;
15 import javax.swing.JMenuBar;
16 import javax.swing.JMenuItem;
17 import javax.swing.JTextArea;
18
19 /**
20 * @className NotepadTest.java
21 *
22 * @Description:TODO(生成一个记事本)
23 *
24 * @date 2018.7.23
25 *
26 * @author 银桑的洞爷湖
27 *
28 */
29 public class NotepadTest extends JFrame implements ActionListener{// 监听事件
30 // 1.定义一个文本框 全局变量,在哪都可以使用 new的话一开始就会占用空间;null的话,创造了但不会占用空间
31 JTextArea jTextArea=null;
32 // 2.定义一个菜单栏
33 JMenuBar jMenuBar = null;
34 // 3.定义一个菜单"文件"
35 JMenu jMenu1 = null;
36 // 4.定义 打开和
37 JMenuItem jMenuItem1 = null;
38 // 5.保存
39 JMenuItem jMenuItem2 = null;
40 // 6.定义一个文件选择
41 JFileChooser jFileChooser = null;
42 // 7.定义一个filereader 文件输入流:从中读取数据,打开时要用输入流读取
43 FileReader fileReader = null;
44 // 8.定义一个filewrite 文件输出流:保存 保存到某个文件中
45 FileWriter fileWriter = null;
46 // 9.定义一个缓冲字符输入流 缓冲区 可当成一个水池,每次给里面放一瓢水,等这个水池蓄满以后一次性取出来
47 BufferedReader bufferedReader = null;
48 // 10.定义一个缓冲字符输出流
49 BufferedWriter bufferedWrider = null;
50
51 /**
52 * @Description:TODO(构造函数) 方法名必须和类名相同
53 * @param
54 * @return 思路:
55 生成一个记事本
56 1.定义记事本的样式
57 2.生成一个记事本
58 3.实现记事本的功能 打开和保存
59 */
60
61 public NotepadTest(){
62 // 1.实例化文本框 new
63 jTextArea=new JTextArea();
64 // 2.实例化菜单栏
65 jMenuBar=new JMenuBar();
66 // 3.实例化一个菜单"文件"
67 jMenu1=new JMenu("文件");
68 // 4.实例化 打开 按钮
69 jMenuItem1=new JMenuItem("打开");
70 // 绑定监听事件 监视者的意思
71 jMenuItem1.addActionListener(this);// this表当前对象 jMenuItem1
72 jMenuItem1.setActionCommand("打开");// setActionCommand:给哪个设置监听事件
73 // 5.实例化 保存 按钮
74 jMenuItem2 = new JMenuItem("保存");
75 // 绑定监听事件 监视者的意思
76 jMenuItem2.addActionListener(this);// this表当前对象
77 jMenuItem2.setActionCommand("保存");// setActionCommand:给哪个设置监听事件
78 // 6.设置文本框的背景颜色
79 jTextArea.setBackground(Color.WHITE);
80 // 7.归为 定位
81 // 将菜单栏添加到窗体中
82 this.setJMenuBar( jMenuBar );
83 // 将菜单添加到菜单栏中
84 jMenuBar.add(jMenu1);
85 // 将“打开”和“保存”添加到“文件”菜单中
86 jMenu1.add(jMenuItem1);
87 jMenu1.add(jMenuItem2);
88 // 将文本框添加到窗体中
89 this.add(jTextArea);
90 // 8.设置记事本标题
91 this.setTitle("啊灵呀记事本");
92 // 9.设置记事本大小
93 this.setSize(800,600);
94 // 10.当我们关闭窗口时 关闭进程
95 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
96 // 11.显示窗口
97 this.setVisible(true);
98 }
99
100 // 用流一般要抛异常
101
102 /**
103 * @Description:TODO(main函数 门)
104 * @param args
105 * @return void
106 */
107
108 public static void main(String[] args){
109 NotepadTest notepadTest=new NotepadTest();
110 }
111
112 @Override
113 public void actionPerformed(ActionEvent e){
114 // 实现 打开 和 保存 功能
//点 打开 按钮
115 if(e.getActionCommand().equals("打开")){
116 // 1.实例化jFileChooser 文件选择
117 jFileChooser=new JFileChooser();
118 // 2.定义一个标题
119 jFileChooser.setDialogTitle("选择要打开的文件");
120 // 3.设置一个默认的路径
121 jFileChooser.showOpenDialog(null);
122 // 4.当点击打开时,让文件选择框自动弹出
123 jFileChooser.setVisible(true);
124 //5.用address 保存用户编辑文件的绝对路径
125 String address=jFileChooser.getSelectedFile().getAbsolutePath();
126
127 try{
128 // 6.实例化文件输入流
129 fileReader=new FileReader(address);
130 //7.实例化缓冲字符输入流 缓冲区 暂时存放进去
131 bufferedReader =new BufferedReader(fileReader);
132 //8.定义一个str判断输入的字符是否已经为空
133 String str="";
134 //9.定义一个strAll接收文件的全部信息
135 String strAll="";
136 //去缓冲区取数据并保存到strAll中 read()返回-1,读取完 readLine():一行行读
137 while((str=bufferedReader.readLine())!=null){
138 strAll=str+"\r\n";
139 }
140 jTextArea.setText(strAll);
141 }catch(IOException e1){
142 e1.printStackTrace();
143 }finally{// 可保证里面的代码一定会执行
144 try{
145 bufferedReader.close();
146 fileReader.close();
147 }catch(IOException e1){
148 e1.printStackTrace();
149 }
150 }
151 }
//点 保存 按钮
if(e.getActionCommand().equals("保存")){
JFileChooser jFileChooser1=new JFileChooser();
jFileChooser1.setDialogTitle("保存");
jFileChooser1.showSaveDialog(null);
jFileChooser1.setVisiable(true);
try{
//为fileWrite分配空间 输出流
fileWriter =new FileWriter(jFileChooser1.getSelectedFile().getAbsolutePath());
//为bufferedWrite分配空间 缓冲输出流
bufferedWriter = new BufferedWriter(fileWriter);
//保存进去
bufferedWriter.write(this.jTextArea.getText());
}catch (IOException e2) {
e2.printStackTrace();
}finally {
//关闭文件
try {
fileWriter.close();
bufferedWriter.close();
} catch (IOException e3) {
e3.printStackTrace();
}
}
152 }
}
153 }