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.文件复制
程序设计思路
- 用户输入源文件路径后判断文件是否存在
- 源文件存在,继续输入目标路径,并在目标路径查重
- 通过缓冲区实现文件的复制