Java第九次作业

(一)学习总结

原程序执行结果

文件拷贝完成,耗时233毫秒

修改后

import java.io.*;
public class Demo{
    public static void main(String args[]) {
        FileInputStream in=null;
        FileOutputStream out=null;
        File fSource=new File("d:"+File.separator+"my.jpg");
        File fDest=new File("d:"+File.separator+"java"+File.separator+"my.jpg");
        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);
            int len=0;
            byte[] b = new byte[1024];        //添加byte数组作为缓冲区
            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();
            }      
        }     
    }
}

运行结果

文件拷贝完成,耗时0毫秒

个人理解

  • 上述的例子就好比在把一个坑里的沙子移动到另外一个坑里。
    第一种方法:把沙子一粒一粒地移向第二个坑,效率很低
    第二种方法:把沙子放满一个小桶随后再移到第二个坑,效率较高。
  • 数组byte就是移动沙子时使用到的小桶(缓冲区),所有的缓冲数据都储存在这个数组上;如果没有这个缓冲,必须再从输入流中按字节读取,时间效率将大大降低
  • 另外,由于一个汉字占用两个字节,所以为了避免造成乱码,数组的长度需要设置为偶数

(二)实验总结

1.宠物商店

程序设计思路

  • vo包中新建SoldPet类,添加已销售的宠物的属性
  • tools包中新建FileUtils类,添加方法实现新建销售文件并保存已销售宠物
  • 修改普通用户界面的购买按钮监听器调用的购买方法,购买完毕后自动创建当天的销售记录

在用户界面购买宠物

本地销售记录储存

2.文件复制

程序设计思路

  • 用户输入源文件路径后判断文件是否存在
  • 源文件存在,继续输入目标路径,并在目标路径查重
  • 通过缓冲区实现文件的复制

(三)代码托管

原文地址:https://www.cnblogs.com/yamito/p/6893772.html