zoukankan      html  css  js  c++  java
  • IO流复制文件

    1. 经过测试可以复制 txt excel csv exe pdf文件其他格式的没测,估计也没问题

    public class Hello {
        private static final  String LINE_SEPARATOR = System.getProperty("line.separator");//换行
        public static void main(String[] args) throws Exception {
            FileInputStream reader = new FileInputStream("d:/毕向东Java基础课堂笔记.pdf");
            FileOutputStream writer = new FileOutputStream("e:\毕向东Java基础课堂笔记.pdf");
            int len = 0;
            byte[] buffer = new byte[1024*1024];//1MB缓存
            while((len = reader.read(buffer))!=-1){ //len = reader.read(buffer) buffer千万不要忘了,否则复制的文件超大
                writer.write(buffer ,0 , len);
                writer.flush();
            }
            System.out.println("复制成功");
            writer.close();
            reader.close();
        }
    }

     2.优化复制文件

        public static void main(String[] args) throws Exception {
            File src = new File("d:/Evernote_6.1.2.2292.exe");
            File des = new File("e:\NEW_Evernote_6.1.2.2292.exe");
    
            copyFile(src,des);
        }
    
        private static void copyFile(File src, File des) throws  Exception{
            FileInputStream reader = new FileInputStream(src);
            FileOutputStream writer = new FileOutputStream(des);
            int len = 0;
            byte[] buffer = new byte[1024*1024];//1MB缓存
            while((len = reader.read(buffer))!=-1){ //len = reader.read(buffer) buffer千万不要忘了,否则复制的文件超大,陷入死循环
                writer.write(buffer ,0 , len);
                writer.flush();
            }
            System.out.println("复制成功");
            writer.close();
            reader.close();
        }
    

     3.下载文件三要素: contentType, contentLength, setHeader-"Content-Disposition"    

      

    			File f = new File("d:/photo_04.jpg");
    			response.setHeader("Content-Disposition", "attachment; filename="+f.getName());
    			response.setContentType("image/jpeg");	
    			FileInputStream fis = new FileInputStream(f);
    			response.setContentLength(fis.available());
    			byte[] buf = new byte[1024];
    			int len = 0;
    			while((len = fis.read(buf))!=-1){
    				response.getOutputStream().write(buf, 0, len);
    			}
    

      4.优化: 在doGet方法中调用即可!

    private static Map<String,String> imageContentType = new HashMap<String,String>();
    	static{
            imageContentType.put("jpg", "image/jpeg");
            imageContentType.put("jpeg", "image/jpeg");
            imageContentType.put("png", "image/png");
            imageContentType.put("tif", "image/tiff");
            imageContentType.put("tiff", "image/tiff");
            imageContentType.put("ico", "image/x-icon");
            imageContentType.put("bmp", "image/bmp");
            imageContentType.put("gif", "image/gif");
    	}
    	
    	public static void writeImgToResponse(File image, HttpServletResponse response) throws Exception{
    		FileInputStream fis = new FileInputStream(image);
    		response.setContentLength(fis.available());
    		
    		String filename = image.getName();
    		response.setHeader("Content-Disposition", "attachment; filename=" + filename);
    		
    		String type_key = filename.substring(filename.lastIndexOf(".") + 1).toLowerCase();
    		response.setContentType(imageContentType.get(type_key));
    		
    		byte[] buf = new byte[1024*1024];
    		int len = 0;
    		while((len = fis.read(buf)) != -1){
    			response.getOutputStream().write(buf, 0, len);
    		}	
    	}
    

      5.继续优化:当用到框架的时候,不懂为什么不设置下载头?

    public static void writeImgToResponse(File image, HttpServletResponse response) throws Exception {
            FileInputStream inputStream = new FileInputStream(image);
            int length = inputStream.available();
            byte data[] = new byte[length];
            response.setContentLength(length);
            String fileName = image.getName();
            String fileType = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
            response.setContentType(imageContentType.get(fileType));
            inputStream.read(data);
            OutputStream toClient = response.getOutputStream();
            toClient.write(data);
            toClient.flush();
            IOUtils.closeQuietly(toClient);
            IOUtils.closeQuietly(inputStream);
        }
  • 相关阅读:
    eslint 验证vue文件 报错 unexpected token =解决方法
    启动3ds Max报 d3dx9_43.dll丢失 解决方法
    windows下webpack不是内部命令 解决方法
    修改node.js默认的npm安装目录
    tp5 重定向缺少index.php报错(No input file specified)
    PHP单表操作mysqli数据库类的封装
    php 常见图片处理函数封装
    php图像处理函数image_type_to_extension、image_type_to_mime_type 的区别
    kubernetes集群部署mysql 8.0
    Maven ResourceBundle.getBundle读取Properties异常MissingResourceException: Can't find bundlei解决方法
  • 原文地址:https://www.cnblogs.com/bravolove/p/5811307.html
Copyright © 2011-2022 走看看