您的位置:首页 > 职场人生

《黑马程序员》 文件加载与保存

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();
}
}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息