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,測試成功。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM