《黑马程序员》 文件加载与保存
2014-04-25 11:06
381 查看
package filetools; import java.awt.*; import java.awt.event.*; import java.io.*; public class MenuDemo { private Frame f; private TextArea f_ta; //菜单部分的添加 private MenuBar mb; //菜单栏 private Menu mStart,mFile,mRun,mBoot,mHelp,mSub1,mSub2; //菜单 private MenuItem mi,mi2,mi3,mi4,mi5,mi6,mi7,mis1,mis2; //菜单条目 //文件对话框 private FileDialog fd; private FileDialog fs; private File file; //定义成成员。 如果对象存在。我们就不再创建新的对象了 public MenuDemo(){ init(); } public void init(){ f=new Frame("菜单练习"); f.setBounds(300,100,600,500); // f.setLayout(new FlowLayout()); //不写布局让它默认使用边界布局 //边界布局会自动填充边界的 flowlayout可以拉动但是一抖动之后布局就会发生变化 //添加菜单 //先实例化对象 mb=new MenuBar(); mFile=new Menu("文件"); mStart=new Menu("开始"); mRun=new Menu("运行"); mBoot=new Menu("启动"); mHelp=new Menu("帮助"); mi=new MenuItem("常用工具"); mi2=new MenuItem("优化工具"); mi3=new MenuItem("美化工具"); mi4=new MenuItem("评估工具"); mi5=new MenuItem("浏览"); //读取选定的文件的内容设置到文本区域中 mi6=new MenuItem("保存"); //读取文本区域中的内容然后保存在文件中 mi7=new MenuItem("退出"); //子条目及子菜单的初始化 mSub1=new Menu("单机软件"); mSub2=new Menu("网络应用"); mis1=new MenuItem("办公"); mis2=new MenuItem("浏览器"); mSub1.add(mis1); mSub2.add(mis2); mRun.add(mSub1); mRun.add(mSub2); //文件对话框的初始化 fd=new FileDialog(f,"文件浏览",FileDialog.LOAD); //可以加载或保存的对话框 fd.setBounds(300,200,400,200); fs=new FileDialog(f,"文件保存",FileDialog.SAVE); //可以加载或保存的对话框 fs.setBounds(300,200,400,200); //把条目添加到菜单。 //把菜单添加到菜单栏 mb.add(mFile); mb.add(mStart); mb.add(mRun); mb.add(mBoot); mb.add(mHelp); //把条目添加到菜单 mStart.add(mi); mStart.add(mi2); mStart.add(mi3); mStart.add(mi4); mFile.add(mi5); mFile.add(mi6); mFile.add(mi7); //把菜单栏添加到窗体 f.setMenuBar(mb); //是设置到窗体上 f_ta=new TextArea(28,80); //设置行和列 f.add(f_ta); event(); //加载事件 f.setVisible(true); } public void event(){ micEvent(); windowCloseEvent(); openItemEvent(); saveItemEvent(); } public void openItemEvent(){ //打开条目的事件 //用于激活打开文件对话框 mi5.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ fd.setVisible(true); String fileDirectory=fd.getDirectory(); //获取文件的路径,其实就是获取目录 String fileName=fd.getFile(); //获取选中的文件 获取到的是文件名 System.out.println(fileDirectory+"\r\n"+fileName); // try{ //把它给封装成路径 // File file=new File(fileName); //把路径和字符串封装成对象 file=new File(fileDirectory,fileName); if(fileDirectory==null||fileName==null) return ; //返回 f_ta.setText(""); //清空以前的旧的数据 //解决思路: //把对象定义成成员。文件对象存在则把数据写入到文件中 //如果文件不存在才需要出现选择的对话框。并且文件是写在源文件上的 loadFile(file); // }catch(Exception e){ // throw new RuntimeException("读取失败"); // } } }); } //保存按钮的事件 public void saveItemEvent(){ mi6.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //对象存在则需要执行下面的动作 if(file==null){ //激活对话框 fs.setVisible(true); String fileDirectory=fd.getDirectory(); String fileName=fd.getFile(); if(fileDirectory==null||fileName==null) return ; //返回 f_ta.setText(""); //清空以前的旧的数据 file=new File(fileDirectory,fileName); }else //如果存在则直接写数据 mySaveFile(file); //搞错了 } }); } public void mySaveFile(File f) { try{ //数据是从文本区域中获取到的 BufferedWriter bw=new BufferedWriter(new FileWriter(f)); //获取数据 String str=f_ta.getText(); bw.write(str); //直接把字符串写到入文件中 //bufferedwriter的父类writer可以直接把一个字符串给写入到文件中 //怎么把我的旧的数据给清空了 bw.close(); //为什么一刷新原来的数据就没有了 }catch(Exception e){ throw new RuntimeException("写入失败"); } } //获取文件 public void loadFile(File file) { //功能的异常抛给调用者 try{ BufferedReader br=new BufferedReader(new InputStreamReader(new FileInputStream(file))); //把字节流转换成字符流 //往目标中输出 String line=null; while((line=br.readLine())!=null){ // System.out.println(line+"\r\n"); // //把内容设置到textarea中 f_ta.append(line+"\r\n"); } }catch(Exception e){ throw new RuntimeException("读取失败"); } } public void windowCloseEvent(){ f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } //菜单的子条目的事件 public void micEvent(){ //可以调用了 mi7.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ System.exit(0); } }); } /* 菜单的演示 */ public static void main(String[] args) { new MenuDemo(); } }
相关文章推荐
- #无私分享《传智播客2011版。net平台c#视频》全套哦30.7G
- 黑马程序员宣传语征集大赛
- 黑马程序员-------关于今天的一个程序学习心得
- 黑马程序员
- 黑马程序员:java基础——OOP面向对象的特征
- 黑马程序员 JAVASE——this.super关键字用法小结
- 黑马程序员 JAVASE——final和static关键字
- 黑马程序员 JAVASE——单例设计模式
- 黑马程序员 JAVASE——内部类
- 黑马程序员 JAVASE——多线程安全(并发问题和死锁等)
- 黑马程序员 JAVASE——String
- 黑马程序员 java基础加强——jdk1.5新特性—枚举
- 黑马程序员 JAVA提高——反射
- 黑马程序员 java提高——张孝详交通灯管理系统
- 黑马程序员 java提高——张孝祥银行业务调度系统
- 黑马程序员--Java基础--01函数
- 黑马程序员--Java基础--02数组
- 黑马程序员--Java基础--03面向对象(1)
- 黑马程序员--Java基础--04面向对象(2)
- 黑马程序员--Java基础--05内部类及异常