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); ResponseEntity byteArr=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程序设计有所帮助。