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 ...
随机推荐
- uboot能ping通本机无法ping通本机上搭建的虚拟机
注意 转载请注明出处:https://www.cnblogs.com/dakewei 一.背景 1.1 uboot不能被其它主机ping通,这是由于uboot没有对其它主机发送过来的arp包进行响应, ...
- HDU 4370 0 or 1(转化为最短路)题解
思路:虽然是最短路专题里的,但也很难想到是最短路,如果能通过这些关系想到图论可能会有些思路.我们把X数组看做邻接矩阵,那么三个条件就转化为了:1.1的出度为1:2.n的入度为1:3.2~n-1的出度等 ...
- Maven编译代码的时候跳过单元测试
Maven编译代码的时候跳过单元测试 <properties> <maven.test.skip>true</maven.test.skip> </prope ...
- 近期(17年三月至四月) TODOlist
前言 今天突然发现好久没有更新博客了,最近确实记录的内容不多,也沉迷Gayhub无法自拔,和那只北极熊愉快的玩耍.不知道为什么记性变差了许多,所以简单的列一个近期的TODOlist给自己一个提醒. T ...
- Codeforces Round #398 (Div. 2) A,B,C,D
A. Snacktower time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...
- Android之扫描二维码和根据输入信息生成名片二维码
开发中常常遇到二维码扫码操作,前段时间做项目要实现该功能,于是网上查找资料实现了,现在把他做出来给各位分享一下,主要包含了二维码扫描和生成二维码名片. 先来看看效果图: 生成的二维码,打开微信扫一 ...
- bzoj2049: [Sdoi2008]Cave 洞穴勘测 lct裸题
题意:三种操作一种摧毁一条边,一种链接一条边,一种查询两个点是否联通 题解:lct的link和cut即可 /********************************************** ...
- MyBatis案例&增删改查
一.MyBatis入门案例: ①:引入jar包 ②:创建实体类 Dept,并进行封装 ③ 在Src下创建大配置mybatis-config.xml <?xml version="1.0 ...
- 调试工具-fiddler:本地资源替换线上调试
Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件,这 ...
- Git观察和比较
log git log 时间是从下到上,从远到近 whatchanged git whatchanged 时间是从下到上,从远到近 diff --staged 比较工作区和缓存区之间的差异 g ...