zoukankan      html  css  js  c++  java
  • File根据inputstream复制文件到临时目录,使用完之后删除

    项目中有这个需求:

    1)上传文件通过公司平台的校验,校验成功后,通过接口,返回文件流;

    2)我们根据这个文件流进行操作。这里,先将文件流复制文件到项目临时目录WEB-INF/temp;文件使用完毕,删除之;

    下面是模拟代码:

    FileUtil.java:

    package com.java.file;
    
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.UnsupportedEncodingException;
    import java.net.URLDecoder;
    
    /**
     * File工具类
     * @author CY
     *
     */
    public class FileUtil {
        
        public static final int BYTESIZE = 1024;                                        //每次读取的大小 1KB
        
        /**
         * 将文件流保存在项目WEB-INF/temp目录下,并且返回这个文件;
         * @param is              待转化的文件流
         * @param fileName        临时文件名
         * @return
         * @throws IOException
         */
        public static File saveTempFile(InputStream is, String fileName){
            String path = "";
            try {
                path = URLDecoder.decode(FileUtil.class.getClassLoader().getResource("../temp").getPath(), "utf-8");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            System.out.println(path);
            ///E:/workspace/workspace for j2ee/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/MyTest/WEB-INF/temp/
            
            File temp = new File(path + fileName);
            
            BufferedInputStream bis = null;
            BufferedOutputStream bos = null;
            try{
                bis = new BufferedInputStream(is);
                bos = new BufferedOutputStream(new FileOutputStream(temp));                            //把文件流转为文件,保存在临时目录
                int len = 0;
                byte[] buf = new byte[10*BYTESIZE];                                                    //缓冲区
                while((len=bis.read(buf)) != -1){
                    bos.write(buf, 0, len);
                }
                bos.flush();
            }catch(IOException e){
                e.printStackTrace();
            }finally{
                try {
                    if(bos!=null) bos.close();
                    if(bis!=null) bis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return temp;
        }
        
        /**
         * 删除文件  用来删除临时文件
         * @param file
         */
        public static void deleteTempFile(File file){
            file.delete();
        }
        
    }

    Servlet模拟调用:

    1.模拟从本地读取一个文件,构造文件流;

    2.将这个文件流保存在项目临时目录 WEB-INF/temp下面;

    3.对文件操作结束之后,删除这个文件;

    package com.java.servlet;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.java.file.FileUtil;
    
    /**
     * 构造servlet访问
     * @author CY
     *
     */
    public class MyServlet extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //模拟得到一个文件流
            InputStream fis = new FileInputStream(new File("E:\MA5800系列-pic.zip"));
            
            //保存在WEB-INF/temp目录下
            File temp = FileUtil.saveTempFile(fis, "MA5800.zip");
            System.out.println(temp.getAbsolutePath());
            
            //使用完之后删除
            temp.delete();
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
        
    }    

    访问这个servlet,测试成功。

  • 相关阅读:
    Java实现 洛谷 P1085 不高兴的津津
    Java实现 洛谷 P1085 不高兴的津津
    Java实现 洛谷 P1085 不高兴的津津
    Java实现 洛谷 P1085 不高兴的津津
    Java实现 洛谷 P1422 小玉家的电费
    Java实现 洛谷 P1422 小玉家的电费
    form表单嵌套,用标签的form属性来解决表单嵌套的问题
    SpringMVC上传图片总结(2)--- 使用百度webuploader上传组件进行上传图片
    SpringMVC上传图片总结(1)---常规方法进行图片上传,使用了MultipartFile、MultipartHttpServletRequest
    Win10安装后必做的优化,解决磁盘100%占用
  • 原文地址:https://www.cnblogs.com/tenWood/p/7531751.html
Copyright © 2011-2022 走看看