Java实现的文件上传下载工具类完整实例【上传文件自动命名】
本文实例讲述了Java实现的文件上传下载工具类。分享给大家供大家参考,具体如下:
这是一个在Eclipse环境下采用Java语言实现文件上传下载的工具类。和之前介绍的C#文件上传下载工具类一样,在上传时,为避免文件名在服务器中重复,采用“服务器时间(定义到毫秒)+文件名+文件后缀“的方式作为服务器上的文件名;下载过程中利用springmvcResponseEntity做文件下载,返回的是字节流,下载成功后可自定义文件的保存路径。
具体源码如下所示:
packagecom.utils;
importjava.io.File;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.UnsupportedEncodingException;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importorg.apache.commons.io.FileUtils;
importorg.springframework.http.HttpHeaders;
importorg.springframework.http.HttpStatus;
importorg.springframework.http.MediaType;
importorg.springframework.http.ResponseEntity;
/**
*文件上传下载工具类
*
*/
publicclassFileHelper{
/**
*根据路径确定目录,没有目录,则创建目录
*
*@parampath
*/
privatestaticvoidcreateDir(Stringpath){
FilefileDir=newFile(path);
if(!fileDir.exists()&&!fileDir.isDirectory()){//判断/download目录是否存在
fileDir.mkdir();//创建目录
}
}
/**
*将文件名解析成文件的上传路径
*
*@paramfileName
*@return上传到服务器的文件名
*/
publicstaticStringtransPath(StringfileName,Stringpath){
createDir(path);
Datedate=newDate();
SimpleDateFormatdateformat=newSimpleDateFormat("yyyyMMddhhmmssSSS");//定义到毫秒
StringnowStr=dateformat.format(date);
StringfilenameStr=fileName.substring(0,fileName.lastIndexOf("."));//去掉后缀的文件名
Stringsuffix=fileName.substring(fileName.lastIndexOf(".")+1);//后缀
if(fileName.trim()!=""){//如果名称不为"",说明该文件存在,否则说明该文件不存在
path+="\\"+filenameStr+nowStr+"."+suffix;//定义上传路径
}
returnpath;
}
/**
*提醒文件下载
*
*@paramfileName
*@parampath
*@return
*/
publicstaticResponseEntitydownloadFile(StringfileName,Stringpath){
try{
fileName=newString(fileName.getBytes("GB2312"),"ISO_8859_1");//避免文件名中文不显示
}catch(UnsupportedEncodingExceptione1){
e1.printStackTrace();
}
Filefile=newFile(path);
HttpHeadersheaders=newHttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment",fileName);
ResponseEntitybyteArr=null;
try{
byteArr=newResponseEntity(FileUtils.readFileToByteArray(file),headers,HttpStatus.OK);
}catch(IOExceptione){
e.printStackTrace();
}
returnbyteArr;
}
/**
*将输入流中的数据写入字节数组
*
*@paramin
*@return
*/
publicstaticbyte[]inputStream2ByteArray(InputStreamin,booleanisClose){
byte[]byteArray=null;
try{
inttotal=in.available();
byteArray=newbyte[total];
in.read(byteArray);
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(isClose){
try{
in.close();
}catch(Exceptione2){
System.out.println("关闭流失败");
}
}
}
returnbyteArray;
}
}
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。