Java 实现文件上传、下载、打包、文件copy、文件夹copy。
文件and文件夹copy
package org.test; import java.io.*; public class FileCopy { /** * 复制单个文件 * * @param oldPath * String 原文件路径 如:D:\\bbbb\\ssss.txt * @param newPath * String 复制后路径 如:D:\\bbbb\\aa\\ssss.txt * @return boolean */ public void copyFile(String oldPath, String newPath) { try { int bytesum = 0; int byteread = 0; File oldfile = new File(oldPath); if (oldfile.exists()) { // 文件存在时 InputStream inStream = new FileInputStream(oldPath); // 读入原文件 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = new byte[1444]; int length; while ((byteread = inStream.read(buffer)) != -1) { bytesum += byteread; // 字节数 文件大小 System.out.println(bytesum); fs.write(buffer, 0, byteread); } inStream.close(); } } catch (Exception e) { System.out.println("复制单个文件操作出错"); e.printStackTrace(); } } /** * 复制整个文件夹内容 * * @param oldPath * String 原文件路径 如:D:\\bbbb * @param newPath * String 复制后路径 如:E:\\bbbb * @return boolean */ public void copyFolder(String oldPath, String newPath) { try { (new File(newPath)).mkdirs(); // 如果文件夹不存在 则建立新文件夹 File a = new File(oldPath); String[] file = a.list(); File temp = null; for (int i = 0; i < file.length; i++) { if (oldPath.endsWith(File.separator)) { temp = new File(oldPath + file[i]); } else { temp = new File(oldPath + File.separator + file[i]); } if (temp.isFile()) { FileInputStream input = new FileInputStream(temp); FileOutputStream output = new FileOutputStream(newPath + "/" + (temp.getName()).toString()); byte[] b = new byte[1024 * 5]; int len; while ((len = input.read(b)) != -1) { output.write(b, 0, len); } output.flush(); output.close(); input.close(); } if (temp.isDirectory()) {// 如果是子文件夹 copyFolder(oldPath + "/" + file[i], newPath + "/" + file[i]); } } } catch (Exception e) { System.out.println("复制整个文件夹内容操作出错"); e.printStackTrace(); } } public static void main(String args[]) { FileCopy bp = new FileCopy(); bp.copyFile("D:\\bbbb\\ssss.txt","D:\\bbbb\\aa\\ssss.txt" ); bp.copyFolder("D:\\bbbb", "E:\\bbbb"); } }
文件下载
package org.test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FileDownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.downLoad(req, resp); } public void downLoad(HttpServletRequest req, HttpServletResponse resp) throws IOException { String fileTrueName = req.getParameter("fileName"); resp.setContentType("application/x-msdownload; charset=utf-8"); resp.setHeader("Content-disposition", "attachment;filename=\"" + fileTrueName + "\""); byte[] buffered = new byte[1024]; BufferedInputStream input = new BufferedInputStream( new FileInputStream("D:/" + fileTrueName)); DataOutputStream output = new DataOutputStream(resp.getOutputStream()); while (input.read(buffered, 0, buffered.length) != -1) { output.write(buffered, 0, buffered.length); } input.close(); output.close(); } }
对文件夹进行打包
package org.test; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; /** * 将文件打包成ZIP压缩文件 * @author LanP * @since 2012-3-1 15:47 */ public final class FileToZip { private FileToZip() { } /** * 将存放在sourceFilePath目录下的源文件,打包成fileName名称的ZIP文件,并存放到zipFilePath。 * @param sourceFilePath 待压缩的文件路径 * @param zipFilePath 压缩后存放路径 * @param fileName 压缩后文件的名称 * @return flag */ public static boolean fileToZip(String sourceFilePath,String zipFilePath,String fileName) { boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; ZipOutputStream zos = null; if(sourceFile.exists() == false) { System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 不存在. <<<<<<"); } else { try { File zipFile = new File(zipFilePath + "/" + fileName + ".zip"); if(zipFile.exists()) { System.out.println(">>>>>> " + zipFilePath + " 目录下存在名字为:" + fileName + ".zip" + " 打包文件. <<<<<<"); } else { File[] sourceFiles = sourceFile.listFiles(); if(null == sourceFiles || sourceFiles.length < 1) { System.out.println(">>>>>> 待压缩的文件目录:" + sourceFilePath + " 里面不存在文件,无需压缩. <<<<<<"); } else { fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(new BufferedOutputStream(fos)); byte[] bufs = new byte[1024*10]; for(int i=0;i<sourceFiles.length;i++) { // 创建ZIP实体,并添加进压缩包 ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName()); zos.putNextEntry(zipEntry); // 读取待压缩的文件并写进压缩包里 fis = new FileInputStream(sourceFiles[i]); bis = new BufferedInputStream(fis,1024*10); int read = 0; while((read=bis.read(bufs, 0, 1024*10)) != -1) { zos.write(bufs, 0, read); } } flag = true; } } } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { // 关闭流 try { if(null != bis) bis.close(); if(null != zos) zos.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } } return flag; } /** * 将文件打包成ZIP压缩文件,main方法测试 * @param args */ public static void main(String[] args) { String sourceFilePath = "D:\\aaaa"; String zipFilePath = "D:\\aaaa"; String fileName = "aaaa"; boolean flag = FileToZip.fileToZip(sourceFilePath, zipFilePath, fileName); if(flag) { System.out.println(">>>>>> 文件打包成功. <<<<<<"); } else { System.out.println(">>>>>> 文件打包失败. <<<<<<"); } } }
下载
package org.test; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class FileUploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String oper = request.getParameter("oper"); if ("upDownLoad".equals(oper)) { this.upDownLoad(request, response); } } public void upDownLoad(HttpServletRequest request,HttpServletResponse response){ boolean flag = false; String successMessage = "Upload file successed."; String fileName = null; DataInputStream in = null; FileOutputStream fileOut = null; /** 取得客户端的传递类型 */ String contentType = request.getContentType(); byte dataBytes[] = null ; try { /** 确认数据类型是 multipart/form-data */ if (contentType != null && contentType.indexOf("multipart/form-data") != -1) { /** 取得上传文件流的字节长度 */ int fileSize = request.getContentLength(); /** 可以判断文件上传上线 if (fileSize > MAX_SIZE) { successMessage = "Sorry, file is too large to upload."; return; } */ /** 读入上传的数据 */ in = new DataInputStream(request.getInputStream()); /** 保存上传文件的数据 */ int byteRead = 0; int totalBytesRead = 0; dataBytes = new byte[fileSize]; /** 上传的数据保存在byte数组 */ while(totalBytesRead < fileSize){ byteRead = in.read(dataBytes, totalBytesRead, fileSize); totalBytesRead += byteRead; } int i = dataBytes.length; /** 根据byte数组创建字符串 */ String file = new String(dataBytes,"UTF-8"); i = file.length(); /** 取得上传的数据的文件名 */ String upFileName = file.substring(file.indexOf("filename=\"") + 10); upFileName = upFileName.substring(0, upFileName.indexOf("\n")); upFileName = upFileName.substring(upFileName.lastIndexOf("\\") + 1, upFileName.indexOf("\"")); /** 取得数据的分隔字符串 */ String boundary = contentType.substring(contentType.lastIndexOf("boundary=") + 9, contentType.length()); /** 创建保存路径的文件名 */ fileName = upFileName; int pos; pos = file.indexOf("filename=\""); pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; pos = file.indexOf("\n",pos) + 1; int boundaryLocation = file.indexOf(boundary, pos)-4; /** 取得文件数据的开始的位置 */ int startPos = file.substring(0, pos).length(); /** 取得文件数据的结束的位置 */ int endPos = file.substring(boundaryLocation).length(); /** 创建文件的写出类 */ // fileOut = new FileOutputStream(this.getServletContext().getRealPath("/image")+"/"+fileName); fileOut = new FileOutputStream("D:"+"/"+fileName); /** 保存文件的数据 */ fileOut.write(dataBytes, startPos, (fileSize - endPos - startPos)); }else{ successMessage = "Data type is not multipart/form-data."; } } catch (Exception e) { successMessage = e.getMessage(); } finally { try { //close open file in.close(); if(flag){ response.getOutputStream().write(("<a href=\"download?fileName="+fileName+"\" ><img src=\"image/"+fileName+"\"/></a>").getBytes()); } response.getOutputStream().write(successMessage.getBytes()); response.getOutputStream().close(); } catch (Exception e) { e.printStackTrace(); } } } }