Java第九次作业

Java第九次作业

(一)学习总结

1.用思维导图对javaIO操作的学习内容进行总结。

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

	import java.io.*;
	public class Test{
		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;
        	long begintime = System.currentTimeMillis();
        	while((len=in.read())!=-1){
            out.write(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();
        }      
      }     
	}

修改前运行结果:

使用缓冲区后运行结果:

BufferedInputStream 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建 BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从包含的输入流再次填充该内部缓冲区,一次填充多个字节。mark 操作记录输入流中的某个点,reset 操作使得在从包含的输入流中获取新字节之前,再次读取自最后一次 mark 操作后读取的所有字节。

  • BufferedInputStream(InputStream in)

创建一个 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

  • BufferedInputStream(InputStream in, int size)

创建具有指定缓冲区大小的 BufferedInputStream 并保存其参数,即输入流 in,以便将来使用。

3.其他总结

	public void write(byte[] b,int off,int len)
       throws IOException

将指定 byte 数组中从偏移量 off 开始的 len 个字节写入此缓冲的输出流。

一般来说,此方法将给定数组的字节存入此流的缓冲区中,根据需要将该缓冲区刷新,并转到底层输出流。但是,如果请求的长度至少与此流的缓冲区大小相同,则此方法将刷新该缓冲区并将各个字节直接写入底层输出流。因此多余的 BufferedOutputStream 将不必复制数据。

Read()读文件两种方法比较:

	public int read()
       throws IOException

	public int read(byte[] b,int off,int len)
       throws IOException

(二)实验总结

实验内容:

1.宠物商店:在实验八的基础上,增加一个功能,用文件保存每日的交易信息记录。

2.完成文件复制操作,在程序运行后,提示输入源文件路径和目标文件路径。

程序设计思路:

  • vo包中新建SellPetItem类
  • tools包中新建FileUtils类,对于售卖的宠物进行表格的生成

购买方法:

	public void buyPetItem(String no,int number) {
		PetItem pet = adminService.queryData(no);
		if(pet != null){
			if(pet.getNumber() < number){
				JOptionPane.showMessageDialog(this, "现货没有这么多了。请重新输入");
				buyNoText.setText("");
				buyNumberText.requestFocus();			
		    }else{
		    	pet.setNumber(pet.getNumber() - number);
		    	boolean updateSuccess = adminService.updatePet(pet.getNo(),pet.getType(),pet.getAge(),pet.getPrice().toString(),String.valueOf(pet.getNumber()));
				if(updateSuccess){
					queryPet();
					JOptionPane.showMessageDialog(this, "购买成功");
					buyNoText.setText("");
					buyNumberText.setText("");
					Double money = pet.getPrice()*number;
					SellPetItem spet = new SellPetItem(pet.getNo(),pet.getType(),pet.getAge(),pet.getPrice(),number,money);
					FileUtils.saveFruits(spet);  //将本次数据保存到本地文件
				}else{					
					JOptionPane.showMessageDialog(this, "购买失败");
				}
		    }			
		}else{
			JOptionPane.showMessageDialog(this, "购买失败");
		}
	}

(三)代码托管

链接:https://git.oschina.net/hebau_cs15/Java-CS01lxz

posted @ 2017-05-25 19:13  刘晓昭  阅读(217)  评论(0)    收藏  举报