项目中有这个需求:

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复制文件到临时目录,使用完之后删除的更多相关文章

  1. java: file/outputStream/InputStream 复制文件

    java i/o 复制文件 public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 if(args.le ...

  2. winform复制文件到指定目录

    执行步骤 弹出选择对话框:var openFileDialog = new OpenFileDialog(); 设置选择内容,如所有图片:openFileDialog.Filter="图像文 ...

  3. ASP.NET Core MVC压缩样式、脚本及总是复制文件到输出目录

    前言 在.NET Core之前对于压缩样式文件和脚本我们可能需要借助第三方工具来进行压缩,但在ASP.NET MVC Core中则无需借助第三方工具来完成,本节我们来看看ASP.NET Core MV ...

  4. visual studio使用dos命令在生成项目时复制文件到指定目录

    本人使用软件:vs2015 拷贝“项目1”的 bin目录 下, 项目配置的名称(“Release”,“Debug”)目录下,所有内容到“项目2”输出目录(存在直接覆盖): xcopy $(Soluti ...

  5. 【Linux】【三】linux 复制文件到指定目录

    将  application/file/test/logs/ 下的文件 logs.log , logs.tar 复制到  application/file/test/tools/ 下,并新建文件夹[l ...

  6. C#File类常用的文件操作方法(创建、移动、删除、复制等)

    File类,是一个静态类,主要是来提供一些函数库用的.静态实用类,提供了很多静态的方法,支持对文件的基本操作,包括创建,拷贝,移动,删除和 打开一个文件. File类方法的参量很多时候都是路径path ...

  7. linux 系统如何复制文件到指定目录

    首先使用命令函数“cp”  即copy的缩写,    一般模式: cp filename 路径. 如file1在A目录下,我们想把file1复制到B目录下 命令为  cp file1 /home/B ...

  8. VS复制文件到输出目录

    1.选中项目文件 2. 3.编译时就会自动创建目录,并复制文件

  9. 安卓:从assets目录下复制文件到指定目录

    有些时候我们直接将某些资源文件内置到apk中,便于直接使用. 1.首先将文件放置在项目/app/src/main/assets目录中 2.功能代码: public void copyFile(Stri ...

随机推荐

  1. WebApi Session支持

    代码: WebApiConfig using System; using System.Collections.Generic; using System.Linq; using System.Net ...

  2. 【Java----字符串转义与反转义】

    apache工具包common-lang中有一个很有用的处理字符串的工具类,其中之一就是StringEscapeUtils,这个工具类是在2.3版本以上加上的去的,利用它能很方便的进行html,xml ...

  3. 【同步时间】Linux设置时间同步

    所有节点都要确保已安装ntpd(在步骤4已安装) 1.首先选择一台服务器作为时间服务器. 假设选定为node1.sunny.cn服务器为时间服务器. 2.ntp服务器的配置 修改ntp.conf文件: ...

  4. python应用-随机漫步

    对python应用的一个巩固,以及熟悉matplotlib的用法 效果如下: # -*- coding: utf-8 -*- """ Created on Fri Sep ...

  5. 机器学习-ID3决策树算法(附matlab/octave代码)

    ID3决策树算法是基于信息增益来构建的,信息增益可以由训练集的信息熵算得,这里举一个简单的例子 data=[心情好 天气好  出门 心情好 天气不好 出门 心情不好 天气好 出门 心情不好 天气不好 ...

  6. Symmetric Tree,对称树

    问题描述: Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). ...

  7. hdu 4745 Two Rabbits 区间DP

    http://acm.hdu.edu.cn/showproblem.php?pid=4745 题意: 有两只兔子Tom Jerry, 他们在一个用石头围城的环形的路上跳, Tom只能顺时针跳,Jerr ...

  8. php环境重启

    php-fpm mysql nginx 一个lnmp的服务,主要就是靠这三个来维持的. 重启nginx # /usr/local/nginx/sbin/nginx -s stop # /usr/loc ...

  9. LeetCode 48

    这种方法首先对原数组取其转置矩阵,然后把每行的数字翻转可得到结果,如下所示(其中蓝色数字表示翻转轴): 1  2  3  1  4  7  7  4  1 4  5  6 -->  2  5   ...

  10. STL中的map

    map 容器 提供 1 对 1 的关系 定义方式: map<string,int>mp; 写在前面的是关键字. 数据插入: 1.使用 insert 插入 pair 数据 mp.insert ...