java记事本中的保存操作_Java学习笔记——文本操作(记事本实现)

1 import java.awt.FileDialog;

2 import java.awt.GridLayout;

3 import java.awt.Toolkit;

4 import java.awt.datatransfer.Clipboard;

5 import java.awt.datatransfer.DataFlavor;

6 import java.awt.datatransfer.StringSelection;

7 import java.awt.datatransfer.Transferable;

8 import java.awt.datatransfer.UnsupportedFlavorException;

9 import java.awt.event.*;

10 import java.io.BufferedReader;

11 import java.io.BufferedWriter;

12 import java.io.File;

13 import java.io.FileDescriptor;

14 import java.io.FileReader;

15 import java.io.FileWriter;

16 import java.io.FilenameFilter;

17 import java.io.IOException;

18 import java.io.PrintWriter;

19 import java.io.Writer;

20

21 import javax.swing.*;

22 import javax.swing.event.*;

23 import javax.swing.filechooser.FileNameExtensionFilter;

24 import javax.swing.undo.UndoManager;

25 /*26 * 记事本----独孤我---2011年12月5日----绿岛网络办公室27 * 转载请注明出处*28 *29 **/

30

31 public class Notepad extends JFrame implements ActionListener

32 {

33 /**34 *35 */

36 private static final long serialVersionUID = 1L;

37 JPanel pl=new JPanel();

38 JTextArea myarea=new JTextArea();

39

40 //相关变量41 int start=0;//查找开始位置42 int end=0;//查找结束位置43 private String filename; //打开的文件名44 String textContent="";//编辑框中的内容45 private Writer file_writer;

46 UndoManager undoManager = new UndoManager();//撤销管理器47

48 public Notepad()

49 {

50 initComponment();//面板初始化51 }

52 private void initComponment()

53 {

54 //菜单栏55 JMenuBar mb=new JMenuBar();

56

57 //弹出菜单58 final JPopupMenu myPopMenu=new JPopupMenu();

59 JMenuItem copy_pop=new JMenuItem("复制");

60 JMenuItem cut_pop=new JMenuItem("剪切");

61 JMenuItem paste_pop=new JMenuItem("粘贴");

62 JMenuItem delete_pop=new JMenuItem("删除");

63 JMenuItem exit_pop=new JMenuItem("退出");

64

65 myPopMenu.add(cut_pop);

66 myPopMenu.add(copy_pop);

67 myPopMenu.add(delete_pop);

68 myPopMenu.add(paste_pop);

69 myPopMenu.add(exit_pop);

70

71 cut_pop.addActionListener(this);

72 copy_pop.addActionListener(this);

73 delete_pop.addActionListener(this);

74 paste_pop.addActionListener(this);

75 exit_pop.addActionListener(this);

76

77

78 //菜单79 JMenu file=new JMenu("文件");

80 JMenu edit=new JMenu("编辑");

81 JMenu help=new JMenu("帮助");

82

83

84 //子菜单85 JMenuItem new_file=new JMenuItem("新建");

86 JMenuItem open=new JMenuItem("打开");

87 JMenuItem save=new JMenuItem("保存");

88 JMenuItem save_as=new JMenuItem("另存为");

89 JMenuItem exit=new JMenuItem("退出");

90

91 JMenuItem search=new JMenuItem("查找和替换");

92

93 JMenuItem copy=new JMenuItem("复制");

94 JMenuItem cut=new JMenuItem("剪切");

95 JMenuItem paste=new JMenuItem("粘贴");

96 JMenuItem delete=new JMenuItem("删除");

97

98

99 //绑定监听事件100 new_file.addActionListener(this);

101 open.addActionListener(this);

102 save.addActionListener(this);

103 save_as.addActionListener(this);

104 exit.addActionListener(this);

105

106

107 copy.addActionListener(this);

108 cut.addActionListener(this);

109 paste.addActionListener(this);

110 delete.addActionListener(this);

111 search.addActionListener(this);

112

113

114 //将菜单和相应的子菜单添加到菜单栏115 file.add(open);

116 file.add(new_file);

117 file.add(save);

118 file.add(save_as);

119 file.addSeparator();

120 file.add(exit);

121

122 edit.add(copy);

123 edit.add(cut);

124 edit.add(paste);

125 edit.add(delete);

126 edit.add(search);

127

128

129

130 mb.add(file);

131 mb.add(edit);

132 mb.add(help);

133

134

135

136 //给文本区域添加滚动条137 myarea.add(myPopMenu);

138 JScrollPane scrollpane=new JScrollPane(myarea);

139 //主窗口140 setTitle("记事本");

141 setSize(600,400);

142 setLocation(400,300);

143

144 setJMenuBar(mb);

145 //add("Center",myarea);146 add(scrollpane);

147 //add(myPopMenu);148 149 //窗口监听150 addWindowListener(new WindowAdapter() {

151 public void windowClosing(WindowEvent evt)

152 {

153 if(!myarea.getText().equals(textContent))

154 {

155 int result=JOptionPane.showConfirmDialog(null,"文件内容已改变,确认保存退出吗?","警告",1);

156 if(result==JOptionPane.OK_OPTION)

157 {

158 save();

159 System.exit(0);

160 }

161 }

162 else

163 System.exit(0);

164 }

165 });

166 //鼠标监听167 myarea.addMouseListener(new MouseAdapter() {

168 public void mousePressed(MouseEvent e)

169 {

170 int mods=e.getModifiers();

171 //鼠标右键172 if((mods&InputEvent.BUTTON3_MASK)!=0){

173 //弹出菜单174 myPopMenu.show(e.getComponent(),e.getX(),e.getY());

175 }

176 }

177

178 });

179

180 }

181 @Override

182 public void actionPerformed(ActionEvent e) {

183 //TODO Auto-generated method stub184 try

185 {

186 if(e.getActionCommand()=="新建")

187 {

188 myarea.setText("");

189 }

190 else if(e.getActionCommand()=="打开")

191 {

192 FileDialog fileDialog=new FileDialog(this,"打开文件",FileDialog.LOAD);

193 fileDialog.setFile("*.txt");

194 fileDialog.setVisible(true);

195 if(fileDialog.getFile()!=null)

196 {

197 filename=fileDialog.getDirectory()+fileDialog.getFile();//获得文件名198 199 //读取文件200

201 FileReader file_reader=new FileReader(filename);//此处必须要捕获异常202 BufferedReader br=new BufferedReader(file_reader);

203 String temp="";

204 while(br.ready())//判断缓冲区是否为空,非空时返回true205 {

206 int c=br.read();

207 temp+=(char)c;

208 }

209 myarea.setText(temp);

210 br.close();

211 file_reader.close();

212 textContent=myarea.getText();

213 setTitle("记事本-"+filename);

214

215 }

216 }

217 else if(e.getActionCommand()=="保存")

218 {

219 save();

220 }

221 else if(e.getActionCommand()=="另存为")

222 {

223 FileDialog fileDialog=new FileDialog(this,"另存为",FileDialog.SAVE);

224 fileDialog.setFile("*.txt");

225 fileDialog.setVisible(true);

226 if(fileDialog.getFile()!=null) {

227

228 //File temp=new File(file.getAbsolutePath()+".txt");229 //file.renameTo(temp);230 //写入文件231 FileWriter fw=new FileWriter(fileDialog.getDirectory()+fileDialog.getFile());

232 BufferedWriter bw=new BufferedWriter(fw);

233 PrintWriter pw=new PrintWriter(bw);

234 pw.print(myarea.getText());

235 textContent=myarea.getText();

236 pw.close();

237 bw.close();

238 fw.close();

239

240 }

241 }

242 else if(e.getActionCommand()=="退出")

243 {

244 if(!myarea.getText().equals(textContent))

245 {

246 int result=JOptionPane.showConfirmDialog(null,"文件内容已改变,确认保存退出吗?","警告",1);

247 if(result==JOptionPane.OK_OPTION)

248 {

249 save();

250 System.exit(0);

251 }

252 }

253 else

254 System.exit(0);

255 }

256 else if(e.getActionCommand()=="查找和替换")

257 {

258 //查找对话框259 JDialog search=new JDialog(this,"查找和替换");

260 search.setSize(200, 100);

261 search.setLocation(450,350);

262 JLabel label_1=new JLabel("查找的内容");

263 JLabel label_2=new JLabel("替换的内容");

264 final JTextField textField_1=new JTextField(5);

265 final JTextField textField_2=new JTextField(5);

266 JButton buttonFind=new JButton("查找下一个");

267 JButton buttonChange=new JButton("替换");

268 JPanel panel=new JPanel(new GridLayout(2,3));

269 panel.add(label_1);

270 panel.add(textField_1);

271 panel.add(buttonFind);

272 panel.add(label_2);

273 panel.add(textField_2);

274 panel.add(buttonChange);

275 search.add(panel);

276 search.setVisible(true);

277

278

279 //为查找下一个 按钮绑定监听事件280 buttonFind.addActionListener(new ActionListener() {

281

282 @Override

283 public void actionPerformed(ActionEvent e) {

284 //TODO Auto-generated method stub285 String findText=textField_1.getText();//查找的字符串286

287 String textArea=myarea.getText();//当前文本框的内容288 start=textArea.indexOf(findText,end);

289 end=start+findText.length();

290 if(start==-1)//没有找到291 {

292 JOptionPane.showMessageDialog(null,"没找到"+findText,"记事本",JOptionPane.WARNING_MESSAGE);

293 myarea.select(start, end);

294 }

295 else

296 {

297 myarea.select(start,end);

298 }

299

300 }

301 });

302 //为替换按钮绑定监听时间303 buttonChange.addActionListener(new ActionListener() {

304

305 @Override

306 public void actionPerformed(ActionEvent e) {

307 //TODO Auto-generated method stub308 String changeText=textField_2.getText();//替换的字符串309 myarea.select(start, end);

310 myarea.replaceSelection(changeText);

311 myarea.select(start, end);

312 }

313 });

314

315

316

317

318 }

319 else if(e.getActionCommand()=="复制")

320 {

321 copy();

322 }

323 else if(e.getActionCommand()=="粘贴")

324 {

325 paste();

326 }

327 else if(e.getActionCommand()=="剪切")

328 {

329 cut();

330 }

331 else if(e.getActionCommand()=="删除")

332 {

333 delete();

334 }

335 }

336 catch(Exception ex)

337 {

338 ex.printStackTrace();

339 }

340

341

342

343

344

345 }

346 public static void main(String[] args)

347 {

348 new Notepad().setVisible(true);

349 }

350 private void save()

351 {

352 try

353 {

354 File file=new File(filename);

355 FileWriter file_writer;

356

357 file_writer = new FileWriter(file);

358

359 BufferedWriter bw=new BufferedWriter(file_writer);

360 PrintWriter pw=new PrintWriter(bw);//如果直接向文件中输入而不是输入缓冲区,效率低下361

362 pw.print(myarea.getText());

363 textContent=myarea.getText();

364 pw.close();

365 bw.close();

366 file_writer.close();

367 }

368 catch(Exception e)

369 {

370 e.printStackTrace();

371 }

372 }

373 private void cut()

374 {

375 copy();

376 delete();

377 }

378 private void copy()

379 {

380 if(myarea.getSelectedText()==null)

381 {

382 JOptionPane.showMessageDialog(null, "你没有选中任何文字!","记事本",JOptionPane.WARNING_MESSAGE);

383 }

384 Clipboard clipBoard= Toolkit.getDefaultToolkit().getSystemClipboard();

385 StringSelection stringSelection=new StringSelection(myarea.getSelectedText());

386 clipBoard.setContents(stringSelection, null);

387 }

388 private void paste() throws UnsupportedFlavorException, IOException

389 {

390 String content_copy="";

391 //构造系统剪切板392 Clipboard clipBoard= Toolkit.getDefaultToolkit().getSystemClipboard();

393

394 //获取剪切板内容395 Transferable content=clipBoard.getContents(null);

396

397 if(content!=null)

398 {

399 //检查是否是文本类型400 if(content.isDataFlavorSupported(DataFlavor.stringFlavor))

401 {

402 content_copy=(String) content.getTransferData(DataFlavor.stringFlavor);

403

404 //判断文本框中有无文字选中405 if(myarea.getSelectedText()!=null)

406 {

407 myarea.replaceSelection(content_copy);

408 }

409 else

410 {

411 myarea.insert(content_copy, myarea.getSelectionStart());

412 }

413 }

414 }

415 else

416 JOptionPane.showMessageDialog(null, "系统剪贴板中无内容!","记事本",JOptionPane.WARNING_MESSAGE);

417

418

419 }

420 private void delete()

421 {

422 myarea.replaceSelection("");

423 }

424

425

426

427

428 }

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值