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,测试成功。
File根据inputstream复制文件到临时目录,使用完之后删除的更多相关文章
- java: file/outputStream/InputStream 复制文件
java i/o 复制文件 public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 if(args.le ...
- winform复制文件到指定目录
执行步骤 弹出选择对话框:var openFileDialog = new OpenFileDialog(); 设置选择内容,如所有图片:openFileDialog.Filter="图像文 ...
- ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录
前言 在.NET Core之前对于压缩样式文件和脚本我们可能需要借助第三方工具来进行压缩,但在ASP.NET MVC Core中则无需借助第三方工具来完成,本节我们来看看ASP.NET Core MV ...
- visual studio使用dos命令在生成项目时复制文件到指定目录
本人使用软件:vs2015 拷贝“项目1”的 bin目录 下, 项目配置的名称(“Release”,“Debug”)目录下,所有内容到“项目2”输出目录(存在直接覆盖): xcopy $(Soluti ...
- 【Linux】【三】linux 复制文件到指定目录
将 application/file/test/logs/ 下的文件 logs.log , logs.tar 复制到 application/file/test/tools/ 下,并新建文件夹[l ...
- C#File类常用的文件操作方法(创建、移动、删除、复制等)
File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...
- linux 系统如何复制文件到指定目录
首先使用命令函数“cp” 即copy的缩写, 一般模式: cp filename 路径. 如file1在A目录下,我们想把file1复制到B目录下 命令为 cp file1 /home/B ...
- VS复制文件到输出目录
1.选中项目文件 2. 3.编译时就会自动创建目录,并复制文件
- 安卓:从assets目录下复制文件到指定目录
有些时候我们直接将某些资源文件内置到apk中,便于直接使用. 1.首先将文件放置在项目/app/src/main/assets目录中 2.功能代码: public void copyFile(Stri ...
随机推荐
- windows下通过ping和tracert工具来测试网站访问速度
一.环境 OS: windows 二.步骤 2.1.ping mirrors.163.com Pinging mirrors.163.com [23.111.1.151] with 32 bytes ...
- luogu P1192 台阶问题
https://www.luogu.org/problem/show?pid=1192 登楼梯 肯定能想到 dp[i] = dp[i-1] + dp[i-2] + ...+ dp[i-k] 然后想到 ...
- MyBatis使用小案例
首先回顾一下MyBatis封装简化Dao层连接数据库操作的顺序. 首先MyBatis是一个引入的jar包,还有一些依赖包,可能用不到的jar包,一并引入就好了,再多引入一个Juntil.jar测试包( ...
- vue 报错 Cannot read property '__ob__' of undefined的解决方法
记不清第n次遇到这个错误了,但是脑子就是不好用,记不住解决办法啊,每次都要找好久才能找到错误,网上还一篇篇的全是错误答案......所以写篇随笔,记录下,方便大家也方便我自己. 网上有人说是组件循环了 ...
- Leetcode 39
//经典回溯法class Solution { public: vector<vector<int>> combinationSum(vector<int>& ...
- 简话Angular 00 为什么要学Angular
一句话: 现在不学Angular的结局,就和5年前不学JQuery一样! 谁学谁知道,早学早进阶! 1. JQuery vs Javascipt 问两个问题: 1) 你用过JQuery吗?当然! 2) ...
- Cache应用/任务Mutex,用于高并发任务处理经过多个项目使用
<?php /** * Class Cache redis 用于报表的缓存基本存储和读写 2.0 * <pre> * Cache::read("diamond.accoun ...
- sql 时间段内没有的数据等于0
如何实现没有的时间段中使用0来填充?? if object_id('[A]') is not null drop table [A] go create table [A]([日期] datetime ...
- DateTime和字符串转换问题
DateTime和string之间的相互转换经常碰到,可就这么简单的一个转换其中也有些需要注意的地方. static void Main(string[] args) { string format ...
- scrollTop和scrollLeft属性
外层元素的高度值是200px,内层元素的高度值是300px.很明显,“外层元素中的内容”高过了“外层元素”本身.当向下拖动滚动条时,有部分内容会隐没在“外层元素的上边界”之外,scrollTop就等于 ...