天下第一帅的....博客建设中....敬请期待...

Java第九次作业--输入输出流和文件操作

Java第九次作业--输入输出流和文件操作

(一)学习总结

1.用思维导图对本周的学习内容进行总结。

2.下面的程序实现了文件的拷贝,但采用的是一个字节一个字节的读写方式,效率很低。使用缓冲区可以减少对文件的操作次数,从读写数据的效率。IO包中提供了两个带缓冲的字节流BufferedInputStream和BufferedOutputStream,查阅JDK帮助文档,修改程序,利用这两个类完成文件拷贝,对比执行效率。

修改后的程序代码:

 import java.io.*;
    public class Test1 {
        public static void main(String args[]) {
            FileInputStream in = null;
            FileOutputStream out = null;
            File fSource = new File("d:" + File.separator + "my.txt");
            File fDest = new File("d:" + File.separator + "java" + File.separator
        + "my.txt");
            if (!fSource.exists()) {
                System.out.println("源文件不存在");
                System.exit(1);
            }
            if (!fDest.getParentFile().exists()) {
                fDest.getParentFile().mkdirs();
            }
            try {
                in = new FileInputStream(fSource);
                out = new FileOutputStream(fDest);
                byte[] b = new byte[1024];
                int len = 0;
                long begintime = System.currentTimeMillis();
                while ((len = in.read(b)) != -1) {
                    out.write(b,0,len);
            }
           long endtime = System.currentTimeMillis();
            System.out.println("文件拷贝完成,耗时" + (endtime - begintime) + "毫秒");
            } catch (Exception e) {
                System.out.println("文件操作失败");
            } finally {
            try {
                in.close();
                out.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

两种程序的运行结果分别为:

文件拷贝完成,耗时632毫秒
文件拷贝完成,耗时2毫秒

总结:
BufferedOutputStream 是缓冲输出流。它继承于FilterOutputStream。 BufferedOutputStream 的作用是为另一个输出流提供“缓而冲功能”。
这种方法效率很高,耗时短,而数组byte要一个一个移动,没有缓冲,;但是如果没有这个缓冲,必须再从输入流中按字节读取,所以时间效率将大大降低。
3.其他需要总结的内容。

事件源:
(1)事件源是一个产生(或触发)事件的对象。当这个事件源对象的某些状态以某种方式发生变化时,就会产生某种类型的事件(一个事件源可能会生成多个不同类型的事件)。如果某个组件(对象)希望得到事件源产生的事件,就需要在这个事件源上注册。
事件:
(2)事件就是承载事件源状态改变时的信息对象。java.awt.event包和javax.swing.event包中定义了各种事件类,类名以Event结尾。
(3)事件监听器接口
API对于每种事件都定义了对应的接口,接口中定义了处理该事件的方法,这些接口称为事件监听器接口。监听器接口以Listener结尾。如ActionListener接口处理ActionEvent事件。事件源产生一个事件,可以传送给事件监听者处理。事件监听者实际上就是一个类,该类实现了某个事件监听器接口,对接受到的事件进行处理。
例如:
添加监听器:

public AdminDialog(Frame owner,boolean modal){
super(owner,modal);
this.init(); //初始化
this.addComponent(); //添加组件
this.addListener(); //添加监听器
queryPet(); //创建对象时显示数据
}

删除按钮监听:

delBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
delPet(); //调用删除方法

修改按钮监听

updateBtn.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
updatePet(); //调用修改方法
}
});

(二)实验总结

1.实现实验七的宠物商店的文件保存等文件操作功能。

实验内容:
1.宠物商店:在实验八的基础上,增加一个功能,用文件保存每日的交易信息记录。
2.完成文件复制操作,在程序运行后,提示输入源文件路径和目标文件路径。

进入欢迎界面:

- 实验设计思路:

1.增加SellPetItem类,FileUtils类。
2.添加新方法实现新建销售文件 并保存内容。
3.定义欢迎窗口类,用工具类实现窗口组件的居中显示和显示窗口图标,把界面编辑好。但是要修改普通用户界面的购买按钮监听器调用的购买方法
4.用户输入源文件路径后判断文件是否存在。如果源文件存在的话,继续输入目标路径,并在目标路径查重。
5.通过缓冲区实现文件的复制操作。

(三)代码托管

- 码云commit历史截图

(四)学习进度条

代码行数(新增/累积) 学习时间(新增/累积) 本周学习内容
目标 5000行 300小时
第2-4周 200/200 20/20 java基本语法
第5周 150/350 20/40 学习了构造函数,各种基本调用方法。
第6周 150/350 30/70 运行
第7周 500/850 15/85 面向对象编程的知识点(封装、继承和多态)
posted @ 2017-05-25 10:54  Android8.8  Views(580)  Comments(0)    收藏  举报