• 文件拷贝的流实现的几种方式


    1.通过BufferedReader和PrintWriter:

    package print;
    
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    /**
     * 将本.java文件复制到copy.java中去 数据源: CopyFileDemo.java FileReader -- BufferedReader
     * 
     * 目的地: Copy.java FileWriter -- BufferedWriter
     * 
     * @author 半步疯子
     *
     */
    public class CopyFileDemo {
    	public static void main(String[] args) throws IOException {
    		/*
    		// 创建读数据的流
    		BufferedReader br = new BufferedReader(new FileReader("src/print/CopyFileDemo.java"));
    		// 创建目的地的流
    		BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));
    
    		String line = null;
    		while ((line = br.readLine()) != null) {
    			bw.write(line);
    			bw.newLine();
    			bw.flush();
    		}
    		
    		bw.close();
    		br.close();
    		*/
    		// 打印流的改进版本
    		BufferedReader br = new BufferedReader(new FileReader("src/print/CopyFileDemo.java"));
    		PrintWriter pw = new PrintWriter(new PrintWriter("Copy.java"));
    		// this(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);
    		// 本身也做了高效的处理
    		String line = null;
    		while((line = br.readLine()) != null) {
    			pw.println(line);
    		}
    		br.close();
    		pw.close();
    	}
    }
    

    2.通过BuffedInputStream和BufferedOutputStream,一个手动buffer:

    package stream.file;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class FileCopy3 {
    	public static void main(String[] args) {
    		FileInputStream fis = null;
    		FileOutputStream fos = null;
    		// 给input 和 output也创建一个缓冲区
    		// read和write操作就直接对它们的缓冲区进行操作
    		BufferedInputStream bis = null;
    		BufferedOutputStream bos = null;
    		try {
    			 fis = new FileInputStream("E:\安装包\mysql-5.6.31-winx64.zip");
    			 fos = new FileOutputStream("a.rar");
    			 bis = new BufferedInputStream(fis);
    			 bos = new BufferedOutputStream(fos);
    			 // 创建一个缓冲区
    			 // 缓冲区越大,copy的速度越快,最快速度为缓冲区大小等于copy文件大小的时候
    			 byte[] buffer = new byte[1024*8];
    			System.out.println("文件正在复制,请稍后...");
    			long begin = System.currentTimeMillis();
    			while(true) {
    				/*
    				 *  read方法返回的是一个int值
    				 *  表示读入缓冲区(buffer)的字节总数
    				 *  因为各种方面的原因,read到缓冲区中
    				 *  的字节数不一定每次都装满了len长度。
    				 *  如果当前源文件中不存在可以读的字节
    				 *  的时候,read的返回值为-1。
    				 */
    				int len = bis.read(buffer);
    				if(len<0) {
    					break;
    				}
    				bos.write(buffer, 0, len);
    			}
    			long end = System.currentTimeMillis();
    			System.out.println("文件复制完成,耗时:"+(end-begin)+"毫秒");
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			// 关闭的顺序必须先关闭in和out的缓冲区再关闭in和out
    			if(bos != null) {
    				try {
    					bos.close();
    				} catch (IOException e) {					
    					e.printStackTrace();
    				}
    			}
    			if(bis != null) {
    				try {
    					bis.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if(fos != null) {
    				try {
    					fos.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    			}
    			if(fis != null) {
    				try {
    					fis.close();
    				} catch (IOException e) {					
    					e.printStackTrace();
    				}
    			}
    			
    		}
    		
    	}
    }
    


  • 相关阅读:
    当函数模版遇上函数重载
    <h2>1. mongodb介绍</h2>
    Your algorithm's runtime complexity must be in the order of O(log n).
    item.imageInsets =
    JobService和JobScheduler机制在Android5.0以上保活
    PL/SQL精明的调用栈分析
    HQL查询步骤
    OSGI项目中获取文件路径
    int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的差别
    通过 KVM+virt-manager配置双屏虚拟机(两套键盘。鼠标)
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053441.html
Copyright © 2020-2023  润新知