java文件处理工具类(文件上传、文件下载、文件删除、文件拷贝)_大头目T的博客-程序员秘密

技术标签: java  后端  

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.util.UUID;

import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Repository;
import org.springframework.web.multipart.MultipartFile;

/**
 * @author TANGSHUAI
 * @date 2020年8月25日 下午4:42:09
 * @文件工具类
 */
@Repository
public class FilesUploadDownload {
    
	/**
	 * 文件上传
	 * 
	 * @param file
	 * @param filePath
	 * @return
	 */
	public String getFilesUpload(MultipartFile file, String filePath) {
    
		String fileName2 = null;
		try {
    
			// 判断文件是否为空
			if (null != file) {
    
				// 获取文件名称
				String fileName = file.getOriginalFilename();
				// 使用UUID保证文件唯一性
				String uuid = UUID.randomUUID().toString();
				// 截取文件后缀名
				int lastIndexOf = fileName.lastIndexOf(".");
				String suffixname = fileName.substring(lastIndexOf, fileName.length());
				// 拼接名称
				fileName2 = uuid + suffixname;
				// 设置文件上传路径
				// String filePath = "C:/Pictureserver/";
				//
				String path = filePath + fileName2;
				File dest = new File(path);
				// 检测目录是否存在,没有则新建一个
				if (!dest.getParentFile().exists()) {
    
					dest.getParentFile().mkdirs();
				}
				// 写入文件
				file.transferTo(dest);
			}
		} catch (IllegalStateException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
    
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return fileName2;
	}

	/**
	 * 文件下载
	 * 
	 * @param response
	 * @param filename
	 * @param filePath
	 * @throws IOException
	 */
	public void getFilesDownload(HttpServletResponse response, String filename, String filePath) throws IOException {
    
		File file = new File(filePath + filename);
		if (file.exists()) {
    
			// 设置content-type,即告诉客户端所发送的数据属于什么类型,设置信息给客户端不解析
			response.setHeader("Content-type", new MimetypesFileTypeMap().getContentType(filename));
			// 设置扩展头,当Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型。
			response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode((String) filename, "UTF-8"));
			OutputStream outputStream = response.getOutputStream();
			byte[] buff = new byte[1024];
			BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
			int i = bis.read(buff);
			while (i != -1) {
    
				outputStream.write(buff, 0, buff.length);
				outputStream.flush();
				i = bis.read(buff);
			}
			// 关闭流
			bis.close();
			outputStream.close();
		}

	}

	/**
	 * 文件复制
	 * 
	 * @param source
	 * @param dest
	 * @throws IOException
	 */
	public void copyFileUsingJava7Files(File source, File dest) throws IOException {
    
		Files.copy(source.toPath(), dest.toPath());
	}
	
	/**
	 * 删除文件
	 * @param fileName
	 * @return
	 */
	public boolean deleteFile(String fileName) {
    
		File file=new File(fileName);
		 // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
		if(file.exists() && file.isFile()) {
    
			if(file.delete()) {
    
				//删除成功返回true
				return true;
			}
		}
		return false;
	}

}
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44315761/article/details/112172016

智能推荐

第16周项目3--用函数指针调用函数(吃饭,睡觉,打豆豆)_用python编写一个函数吃饭睡觉打豆豆_SAP 皮德憨的博客-程序员秘密

/* * Copyright (c) 2014, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:刘畅 * 完成日期:2014 年 12 月 14 日 * 版 本 号:v1.0 * * 问题描述:用函数指针调用函数; * 输入描述:输入命令; * 程序输出:输出要求输出的。 #include u

win10写注册表开机自动启动自己编写的Qt exe程序_九月丫头的博客-程序员秘密

效果图:代码:#include "dia_settings.h"#include <QStandardPaths>#include <QProcess>dia_settings::dia_settings(QWidget *parent) : QDialog(parent){ ui.setupUi(this); //查看注册表是否已经写入程序...

第136天:Web前端面试题总结(理论)_lelara的博客-程序员秘密

网络前端面试题总结HTML + CSS 理论知识1,讲讲输入完网址按下回车,到看到网页这个过程中发生了什么  一个。域名解析  湾 发起TCP的3次握手  C。建立TCP连接后发起HTTP请求  d。服务器端响应HTTP请求,浏览器得到的html代码  即 浏览器解析HTML代码,并请求HTML代码中的资源  F。浏览器对页面进行渲染呈现给用户 2,谈谈你对...

android里makefile的写法_lx627776548的博客-程序员秘密

android里makefile的写法(1)Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件,宏函数’my-dir’, 由编译系统提供。由于一般情况下Android.mk和需要编译的源文件在同一目录下,所以定义成如下形式:LOCAL_PATH:=$(call my-dir)上面的语句的意思是 将LOCAL_PATH变量定义成 本文件所在 目录路径。一

java常见技术题_qfashly的博客-程序员秘密

转自某位群友https://github.com/PetricHwang/coding-interview-university/blob/master/translations/README-cn.md 以下是他的内容,不代表我的观点,仅此转发了解interview-resources-zhCN本来想跳槽,搜了些互联网公司的面试题,发现自己理解都不是很深刻,默默地回去把简历关掉,潜心学...

随便推点

CentOS 6 阶段总结_我们好像在哪见过 t的博客-程序员秘密

    Linux严格区分大小写。一、CentOS 64位安装后基本配置命令rm -fr /* #删根init 0 #关机init 6 #重启setup #负责配置防火墙的开关getenforce #查看当前seLinux配置情况gedit /etc/seLinux/config #利用gedit图形编辑器修改seLinux配置管理(将Enforcing改为disable...

基于AutoJs的抖音短视频养号Apk文件_MonkT的博客-程序员秘密

为啥要养号:1、提高账号得权重,保证发个视频系统会推荐(成为热门得质量高,或者找个工作室给你点赞关注)。2、让抖音短视频平台觉得你是一个正常的号码,评论成为热评的概率高。养号的步骤:1、每天稳定登陆持续一周。2、刷首页推荐、刷同城推荐、看直播总计时间30分钟就好。3、翻一翻抖音的热搜榜单、挑战。4、关注几个自己喜欢的账号。(偶尔看一下推荐)5、无论是首页、推荐、同城、直播均需要点赞和评论切记要看完后点赞评论。养号七宗罪:1、来回切换手机,或者在同一个手机上多个抖音号。

Android自定义View---正式篇_classTC的博客-程序员秘密

本文转自 http://blog.csdn.net/jiangwei0910410003/article/details/42640665 稍有修改,感谢分享!考虑到篇幅和内容相关性,将其分为两篇文章,这里主要记录自定义View的具体使用 接上文 Android自定义View—前奏篇(Paint和Canvas的使用)自定义View的流程为:创建一个继承自View的自定义类 当然也可以继承自任

vs2010调试技巧_lilyh620的博客-程序员秘密

今天的博文将介绍Visual Studio中的一些实用调试技巧。这是受我朋友Scott Cate (他发表过几十篇很棒的VS技术文章) 启发。他最近告诉我,许多Visual Studio下的程序员,甚至一些很有经验的开发人员,都不知道这些技巧。希望这篇文章能帮你掌握这些技巧。它们都很简单,却能帮你节约大量的时间。  跳到当前光标处(Ctrl+F10)  我经常看到人们为了到达目标代

lammps 报错总结_Jasonkun_3的博客-程序员秘密

ERROR on proc 0: Neighbor list overflow, boost neigh_modify one or page出现这个错误的直接原因是体系中某些原子的近邻数超过了2000个(除非你使用neigh_modify命令增加了允许的近邻数),而导致这个错误的可能因素有:初始结构有问题,比如原子分布过于密集。这种情况在一开始就会出错。截断半径设置的太大了,比如大于10A。可以通过命令neighbor,减小截断半径来解决。势参数设置有问题,这种情况一般是在运行一些步后才会出错。