struts2上传工具类
package com.midai.util; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.RandomAccessFile; import java.util.Date; import java.util.Enumeration; import java.util.List; import java.util.ListIterator; import java.util.ResourceBundle; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import java.util.zip.ZipOutputStream; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @Description: 文件相关工具类 * @Copyright: Copyright (c)2014-2015 * @author: yue.yan * @version: $$Rev: 35 $$ * @date: $$Date: 2014-07-25 16:12:49 +0800 (Fri, 25 Jul 2014) $$ * @lastUpdate: $$Author$$ * * Modification History: * Date Author Version Description * ------------------------------------------------------------- * */ public class FileUtil { private static final Logger logger = LoggerFactory.getLogger(FileUtil.class); private static final int BUFFER_SIZE = 1024; /** * 取得文件的路径 * @param fileName * @return String path */ public static String getFilePath(String fileName) { if (StringUtils.isNotBlank(fileName)) { fileName = fileName.replaceAll("\\\\", "/"); return fileName.substring(0, fileName.lastIndexOf("/")); } return ""; } /** * 取得文件名(不包括扩展名) * @param path 文件路径 * @return String 不包括扩展名的文件名 */ public static String getFileName(String path) { if (StringUtils.isNotBlank(path)) { path = path.replaceAll("\\\\", "/"); if (path.contains(".")) { return path.substring(path.lastIndexOf("/") + 1, path.lastIndexOf(".")); } else { return path.substring(path.lastIndexOf("/") + 1); } } return ""; } /** * 取得包括扩展名的文件名 * @param path 文件路径 * @return String 包括扩展名的文件名 */ public static String getFileNameWithExtension(String path) { if (StringUtils.isNotBlank(path)) { path = path.replaceAll("\\\\", "/"); return path.substring(path.lastIndexOf("/") + 1); } return ""; } /** * 取得文件扩展名 * @param path 文件路径 * @return String 文件扩展名 */ public static String getExtension(String path) { if (StringUtils.isNotBlank(path)) { return path.substring(path.lastIndexOf(".") + 1).toLowerCase(); } return ""; } /** * <p>单个文件压缩成zip文件</p> * @param in 压缩文件输入流 * @param out 压缩文件输出流 * @param fileName 文件名 * @return true:成功/false:失败 */ public static boolean zipFile(InputStream in, OutputStream out, String fileName) { try { ZipOutputStream gzout = new ZipOutputStream(out); ZipEntry entry = new ZipEntry(fileName); gzout.putNextEntry( entry ); byte[] buf=new byte[BUFFER_SIZE]; int num; while ((num=in.read(buf)) != -1) { gzout.write(buf,0,num); } gzout.close(); in.close(); }catch(IOException e) { logger.error(e.getMessage()); return false; } return true; } /** * <p>多文件压缩成zip文件</p> * @param files 待压缩文件 * @param out 压缩文件输出流 * @return true:成功/false:失败 */ public static boolean zipFile(List<File> files, OutputStream out) { try { ZipOutputStream gzout = new ZipOutputStream(out); FileInputStream in; byte[] buf; int num; if (files != null) { for (File oneFile : files) { if (!(oneFile.exists() && oneFile.canRead())) continue; in = new FileInputStream(oneFile); gzout.putNextEntry(new ZipEntry(oneFile.getName())); buf=new byte[BUFFER_SIZE]; while ((num=in.read(buf)) != -1) { gzout.write(buf,0,num); } in.close(); } } gzout.close(); }catch(IOException e) { logger.error(e.getMessage()); return false; } return true; } /** * 解压ZIP文件 * @param file zip文件 * @return 解压出来的文件名 */ public static String unZipFile(File file, String extension) { try { ZipFile zipfile = new ZipFile(file); Enumeration<? extends ZipEntry> en = zipfile.entries(); ZipEntry entry = null; String fileName = null; while(en.hasMoreElements()) { entry = en.nextElement(); if (StringUtils.isNotBlank(extension) && !getExtension(entry.getName()).equals(extension)) { continue; } fileName = entry.getName(); InputStream entryis = zipfile.getInputStream(entry); RandomAccessFile fos = new RandomAccessFile (file.getPath() + entry.getName(), "rw"); int n; byte[] bytes = new byte[BUFFER_SIZE]; while((n=entryis.read(bytes)) != -1) { fos.write(bytes, 0, n); } fos.close(); entryis.close(); } zipfile.close(); return fileName; } catch (Exception e) { logger.error(e.getMessage()); } return null; } private static void writeFile(File src, File dst) { try { InputStream in = null; OutputStream out = null; try { in = new BufferedInputStream(new FileInputStream(src), BUFFER_SIZE); out = new BufferedOutputStream(new FileOutputStream(dst), BUFFER_SIZE); byte[] buffer = new byte[BUFFER_SIZE]; while (in.read(buffer) > 0) { out.write(buffer); } } finally { if (null != in) { in.close(); } if (null != out) { out.close(); } } } catch (Exception e) { e.printStackTrace(); } } private static void writeHtmlFile(File htmlFile, File dst) throws IOException { FileInputStream fr = new FileInputStream(htmlFile); InputStreamReader brs = new InputStreamReader(fr,"utf-8"); BufferedReader br = new BufferedReader(brs); FileOutputStream fos=new FileOutputStream(dst); BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fos,"UTF8")); String input = null; //每读一行进行一次写入动作 while(true) { input = br.readLine(); if(input == null){ break; } bw.write(input); //newLine()方法写入与操作系统相依的换行字符,依执行环境当时的OS来决定该输出那种换行字符 bw.newLine(); } br.close(); bw.close(); } private static void writeHtmlFile(String html, File dst) throws IOException { FileWriter fw = null; BufferedWriter bw = null; try { fw = new FileWriter(dst, false); bw = new BufferedWriter(fw); bw.write(html); } catch (IOException e) { e.printStackTrace(); } finally{ bw.close(); fw.close(); } } public static String updateFile(File upload,String uploadFileName){ ResourceBundle rb = ResourceBundle.getBundle("init"); String path = rb.getString("picture.path"); Date d = new Date(); //生产环境文件保存路径 String fileName = d.getTime() + getFileExp(uploadFileName); //开发环境文件保存路径 // String savePath="/upload"+"/" + d.getTime() + getFileExp(uploadFileName); //String toSrc = ServletActionContext.getServletContext().getRealPath(savePath); // 使用時間戳作為文件名 String toSrc = path + "/" + fileName ; //生产环境文件保存路径 File f = new File(path); //开发环境文件保存路径 // File f = new File(ServletActionContext.getServletContext().getRealPath("upload")); logger.info("======================================"+toSrc+"====================="); // 创建文件夹 if (!f.exists()) { f.mkdirs(); } File toFile = new File(toSrc); writeFile(upload, toFile); return fileName; } //此方法可上传 public static String updateWWWFile(File upload,String uploadFileName, String dir){ ResourceBundle rb = ResourceBundle.getBundle("init"); //String path = rb.getString("www.picture.path"); String localPath = rb.getString("www.picture.path"); Date d = new Date(); //生产环境文件保存路径 String fileName = d.getTime() + getFileExp(uploadFileName); //开发环境文件保存路径 // String savePath="/upload"+"/" + d.getTime() + getFileExp(uploadFileName); //String toSrc = ServletActionContext.getServletContext().getRealPath(savePath); // 使用時間戳作為文件名 if (StringUtils.isNotEmpty(dir)) { localPath +="/" + dir ; } String toSrc = localPath + "/" + fileName ; //生产环境文件保存路径 File f = new File(localPath); //开发环境文件保存路径 // File f = new File(ServletActionContext.getServletContext().getRealPath("upload")); logger.info("======================================"+toSrc+"====================="); // 创建文件夹 if (!f.exists()) { f.mkdirs(); } File toFile = new File(toSrc); writeFile(upload, toFile); return fileName; } //222 public static String updateWWWHtmlFile(File upload,String uploadFileName, String dir) throws IOException{ ResourceBundle rb = ResourceBundle.getBundle("init"); String path = rb.getString("www.picture.path"); Date d = new Date(); //生产环境文件保存路径 String fileName = d.getTime() + ".html"; //开发环境文件保存路径 // String savePath="/upload"+"/" + d.getTime() + getFileExp(uploadFileName); //String toSrc = ServletActionContext.getServletContext().getRealPath(savePath); // 使用時間戳作為文件名 if (StringUtils.isNotEmpty(dir)) { path +="/" + dir ; } String toSrc = path + "/" + fileName ; //生产环境文件保存路径 File f = new File(path); //开发环境文件保存路径 // File f = new File(ServletActionContext.getServletContext().getRealPath("upload")); logger.info("======================================"+toSrc+"====================="); // 创建文件夹 if (!f.exists()) { f.mkdirs(); } File toFile = new File(toSrc); writeHtmlFile(upload, toFile); return fileName; } public static String updateWWWHtmlFile(String htmlTitle,String htmlContents, String dir) throws IOException{ ResourceBundle rb = ResourceBundle.getBundle("init"); String path = rb.getString("www.picture.path"); Date d = new Date(); //生产环境文件保存路径 String fileName = d.getTime() + ".html"; //开发环境文件保存路径 // String savePath="/upload"+"/" + d.getTime() + getFileExp(uploadFileName); //String toSrc = ServletActionContext.getServletContext().getRealPath(savePath); // 使用時間戳作為文件名 if (StringUtils.isNotEmpty(dir)) { path +="/" + dir ; } String toSrc = path + "/" + fileName ; //生产环境文件保存路径 File f = new File(path); Document doc = Jsoup.parseBodyFragment(htmlContents); Elements objectEles = doc.getElementsByTag("object"); if(objectEles != null){ ListIterator<Element> objectElesList = objectEles.listIterator(); if(objectElesList.hasNext()){ Element objectEle = objectElesList.next(); if(!"video".equals(objectEle.parent().tagName())){ Element embedEle = objectEle.getElementsByTag("embed").get(0); String objectHtml = objectEle.outerHtml(); String src = embedEle.attr("src"); String width = objectEle.attr("width"); String height = objectEle.attr("height"); String videoUrl = ""; if(StringUtils.isNotEmpty(src) && src.contains("?") && src.contains("=")){ videoUrl = src.split("\\?")[1].split("\\=")[1]; }else if(!src.contains("\\?")){ videoUrl = src; } StringBuffer sb = new StringBuffer(); sb.append("<video controls='controls' width='"+width+"' height='"+height+"' preload='auto' >"); sb.append("<source allowfullscreen='true' quality='high' src='"+videoUrl+"' type='video/mp4'/>"); sb.append(objectHtml); sb.append("您的浏览器不支持此种视频格式。"); sb.append("</video>"); objectEle.after(sb.toString()).nextElementSibling(); // Element videoEle = objectEle.after(sb.toString()).nextElementSibling(); // videoEle.attr("preload","none").attr("poster","http://www.feiliu.com/zt/img/20120417/img01.jpg"); // videoEle.append(objectHtml); // videoEle.appendText("您的浏览器不支持此种视频格式。"); objectEle.remove(); }else{ Element videoEle = objectEle.parent(); videoEle.attr("preload", "auto"); // videoEle.attr("autoplay", "autoplay"); } } } String html = doc.body().html(); StringBuffer sb = new StringBuffer(""); sb.append("<!DOCTYPE html>"); sb.append("<html>"); sb.append("<head>"); sb.append("<title>"+htmlTitle+"</title>"); sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />"); sb.append("</head>"); sb.append("<body>"); sb.append(html); sb.append("</body>"); sb.append("</html>"); //开发环境文件保存路径 // File f = new File(ServletActionContext.getServletContext().getRealPath("upload")); logger.info("======================================"+toSrc+"====================="); // 创建文件夹 if (!f.exists()) { f.mkdirs(); } File toFile = new File(toSrc); writeHtmlFile(sb.toString(), toFile); return fileName; } // 上传文件的文件名 private static String getFileExp(String name) { int pos = name.lastIndexOf("."); return name.substring(pos); } }
/** * Copyright © 2012-2013 <a href="https://github.com/thinkgem/jeesite">JeeSite</a> All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); */ package com.midai.util; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * 文件操作工具类 * 实现文件的创建、删除、复制、压缩、解压以及目录的创建、删除、复制、压缩解压等功能 * @author ThinkGem * @version 2013-06-21 */ public class FileUtils extends org.apache.commons.io.FileUtils { private static Logger log = LoggerFactory.getLogger(FileUtils.class); /** * 复制单个文件,如果目标文件存在,则不覆盖 * @param srcFileName 待复制的文件名 * @param descFileName 目标文件名 * @return 如果复制成功,则返回true,否则返回false */ public static boolean copyFile(String srcFileName, String descFileName) { return FileUtils.copyFileCover(srcFileName, descFileName, false); } /** * 复制单个文件 * @param srcFileName 待复制的文件名 * @param descFileName 目标文件名 * @param coverlay 如果目标文件已存在,是否覆盖 * @return 如果复制成功,则返回true,否则返回false */ public static boolean copyFileCover(String srcFileName, String descFileName, boolean coverlay) { File srcFile = new File(srcFileName); // 判断源文件是否存在 if (!srcFile.exists()) { log.debug("复制文件失败,源文件 " + srcFileName + " 不存在!"); return false; } // 判断源文件是否是合法的文件 else if (!srcFile.isFile()) { log.debug("复制文件失败," + srcFileName + " 不是一个文件!"); return false; } File descFile = new File(descFileName); // 判断目标文件是否存在 if (descFile.exists()) { // 如果目标文件存在,并且允许覆盖 if (coverlay) { log.debug("目标文件已存在,准备删除!"); if (!FileUtils.delFile(descFileName)) { log.debug("删除目标文件 " + descFileName + " 失败!"); return false; } } else { log.debug("复制文件失败,目标文件 " + descFileName + " 已存在!"); return false; } } else { if (!descFile.getParentFile().exists()) { // 如果目标文件所在的目录不存在,则创建目录 log.debug("目标文件所在的目录不存在,创建目录!"); // 创建目标文件所在的目录 if (!descFile.getParentFile().mkdirs()) { log.debug("创建目标文件所在的目录失败!"); return false; } } } // 准备复制文件 // 读取的位数 int readByte = 0; InputStream ins = null; OutputStream outs = null; try { // 打开源文件 ins = new FileInputStream(srcFile); // 打开目标文件的输出流 outs = new FileOutputStream(descFile); byte[] buf = new byte[1024]; // 一次读取1024个字节,当readByte为-1时表示文件已经读取完毕 while ((readByte = ins.read(buf)) != -1) { // 将读取的字节流写入到输出流 outs.write(buf, 0, readByte); } log.debug("复制单个文件 " + srcFileName + " 到" + descFileName + "成功!"); return true; } catch (Exception e) { log.debug("复制文件失败:" + e.getMessage()); return false; } finally { // 关闭输入输出流,首先关闭输出流,然后再关闭输入流 if (outs != null) { try { outs.close(); } catch (IOException oute) { oute.printStackTrace(); } } if (ins != null) { try { ins.close(); } catch (IOException ine) { ine.printStackTrace(); } } } } /** * 复制整个目录的内容,如果目标目录存在,则不覆盖 * @param srcDirName 源目录名 * @param descDirName 目标目录名 * @return 如果复制成功返回true,否则返回false */ public static boolean copyDirectory(String srcDirName, String descDirName) { return FileUtils.copyDirectoryCover(srcDirName, descDirName, false); } /** * 复制整个目录的内容 * @param srcDirName 源目录名 * @param descDirName 目标目录名 * @param coverlay 如果目标目录存在,是否覆盖 * @return 如果复制成功返回true,否则返回false */ public static boolean copyDirectoryCover(String srcDirName, String descDirName, boolean coverlay) { File srcDir = new File(srcDirName); // 判断源目录是否存在 if (!srcDir.exists()) { log.debug("复制目录失败,源目录 " + srcDirName + " 不存在!"); return false; } // 判断源目录是否是目录 else if (!srcDir.isDirectory()) { log.debug("复制目录失败," + srcDirName + " 不是一个目录!"); return false; } // 如果目标文件夹名不以文件分隔符结尾,自动添加文件分隔符 String descDirNames = descDirName; if (!descDirNames.endsWith(File.separator)) { descDirNames = descDirNames + File.separator; } File descDir = new File(descDirNames); // 如果目标文件夹存在 if (descDir.exists()) { if (coverlay) { // 允许覆盖目标目录 log.debug("目标目录已存在,准备删除!"); if (!FileUtils.delFile(descDirNames)) { log.debug("删除目录 " + descDirNames + " 失败!"); return false; } } else { log.debug("目标目录复制失败,目标目录 " + descDirNames + " 已存在!"); return false; } } else { // 创建目标目录 log.debug("目标目录不存在,准备创建!"); if (!descDir.mkdirs()) { log.debug("创建目标目录失败!"); return false; } } boolean flag = true; // 列出源目录下的所有文件名和子目录名 File[] files = srcDir.listFiles(); for (int i = 0; i < files.length; i++) { // 如果是一个单个文件,则直接复制 if (files[i].isFile()) { flag = FileUtils.copyFile(files[i].getAbsolutePath(), descDirName + files[i].getName()); // 如果拷贝文件失败,则退出循环 if (!flag) { break; } } // 如果是子目录,则继续复制目录 if (files[i].isDirectory()) { flag = FileUtils.copyDirectory(files[i] .getAbsolutePath(), descDirName + files[i].getName()); // 如果拷贝目录失败,则退出循环 if (!flag) { break; } } } if (!flag) { log.debug("复制目录 " + srcDirName + " 到 " + descDirName + " 失败!"); return false; } log.debug("复制目录 " + srcDirName + " 到 " + descDirName + " 成功!"); return true; } /** * * 删除文件,可以删除单个文件或文件夹 * * @param fileName 被删除的文件名 * @return 如果删除成功,则返回true,否是返回false */ public static boolean delFile(String fileName) { File file = new File(fileName); if (!file.exists()) { log.debug(fileName + " 文件不存在!"); return true; } else { if (file.isFile()) { return FileUtils.deleteFile(fileName); } else { return FileUtils.deleteDirectory(fileName); } } } /** * * 删除单个文件 * * @param fileName 被删除的文件名 * @return 如果删除成功,则返回true,否则返回false */ public static boolean deleteFile(String fileName) { File file = new File(fileName); if (file.exists() && file.isFile()) { if (file.delete()) { log.debug("删除单个文件 " + fileName + " 成功!"); return true; } else { log.debug("删除单个文件 " + fileName + " 失败!"); return false; } } else { log.debug(fileName + " 文件不存在!"); return true; } } /** * * 删除目录及目录下的文件 * * @param dirName 被删除的目录所在的文件路径 * @return 如果目录删除成功,则返回true,否则返回false */ public static boolean deleteDirectory(String dirName) { String dirNames = dirName; if (!dirNames.endsWith(File.separator)) { dirNames = dirNames + File.separator; } File dirFile = new File(dirNames); if (!dirFile.exists() || !dirFile.isDirectory()) { log.debug(dirNames + " 目录不存在!"); return true; } boolean flag = true; // 列出全部文件及子目录 File[] files = dirFile.listFiles(); for (int i = 0; i < files.length; i++) { // 删除子文件 if (files[i].isFile()) { flag = FileUtils.deleteFile(files[i].getAbsolutePath()); // 如果删除文件失败,则退出循环 if (!flag) { break; } } // 删除子目录 else if (files[i].isDirectory()) { flag = FileUtils.deleteDirectory(files[i] .getAbsolutePath()); // 如果删除子目录失败,则退出循环 if (!flag) { break; } } } if (!flag) { log.debug("删除目录失败!"); return false; } // 删除当前目录 if (dirFile.delete()) { log.debug("删除目录 " + dirName + " 成功!"); return true; } else { log.debug("删除目录 " + dirName + " 失败!"); return false; } } /** * 创建单个文件 * @param descFileName 文件名,包含路径 * @return 如果创建成功,则返回true,否则返回false */ public static boolean createFile(String descFileName) { File file = new File(descFileName); if (file.exists()) { log.debug("文件 " + descFileName + " 已存在!"); return false; } if (descFileName.endsWith(File.separator)) { log.debug(descFileName + " 为目录,不能创建目录!"); return false; } if (!file.getParentFile().exists()) { // 如果文件所在的目录不存在,则创建目录 if (!file.getParentFile().mkdirs()) { log.debug("创建文件所在的目录失败!"); return false; } } // 创建文件 try { if (file.createNewFile()) { log.debug(descFileName + " 文件创建成功!"); return true; } else { log.debug(descFileName + " 文件创建失败!"); return false; } } catch (Exception e) { e.printStackTrace(); log.debug(descFileName + " 文件创建失败!"); return false; } } /** * 创建目录 * @param descDirName 目录名,包含路径 * @return 如果创建成功,则返回true,否则返回false */ public static boolean createDirectory(String descDirName) { String descDirNames = descDirName; if (!descDirNames.endsWith(File.separator)) { descDirNames = descDirNames + File.separator; } File descDir = new File(descDirNames); if (descDir.exists()) { log.debug("目录 " + descDirNames + " 已存在!"); return false; } // 创建目录 if (descDir.mkdirs()) { log.debug("目录 " + descDirNames + " 创建成功!"); return true; } else { log.debug("目录 " + descDirNames + " 创建失败!"); return false; } } /** * 压缩文件或目录 * @param srcDirName 压缩的根目录 * @param fileName 根目录下的待压缩的文件名或文件夹名,其中*或""表示跟目录下的全部文件 * @param descFileName 目标zip文件 */ public static void zipFiles(String srcDirName, String fileName, String descFileName) { // 判断目录是否存在 if (srcDirName == null) { log.debug("文件压缩失败,目录 " + srcDirName + " 不存在!"); return; } File fileDir = new File(srcDirName); if (!fileDir.exists() || !fileDir.isDirectory()) { log.debug("文件压缩失败,目录 " + srcDirName + " 不存在!"); return; } String dirPath = fileDir.getAbsolutePath(); File descFile = new File(descFileName); try { ZipOutputStream zouts = new ZipOutputStream(new FileOutputStream( descFile)); if ("*".equals(fileName) || "".equals(fileName)) { FileUtils.zipDirectoryToZipFile(dirPath, fileDir, zouts); } else { File file = new File(fileDir, fileName); if (file.isFile()) { FileUtils.zipFilesToZipFile(dirPath, file, zouts); } else { FileUtils .zipDirectoryToZipFile(dirPath, file, zouts); } } zouts.close(); log.debug(descFileName + " 文件压缩成功!"); } catch (Exception e) { log.debug("文件压缩失败:" + e.getMessage()); e.printStackTrace(); } } /** * 将目录压缩到ZIP输出流 * @param dirPath 目录路径 * @param fileDir 文件信息 * @param zouts 输出流 */ public static void zipDirectoryToZipFile(String dirPath, File fileDir, ZipOutputStream zouts) { if (fileDir.isDirectory()) { File[] files = fileDir.listFiles(); // 空的文件夹 if (files.length == 0) { // 目录信息 ZipEntry entry = new ZipEntry(getEntryName(dirPath, fileDir)); try { zouts.putNextEntry(entry); zouts.closeEntry(); } catch (Exception e) { e.printStackTrace(); } return; } for (int i = 0; i < files.length; i++) { if (files[i].isFile()) { // 如果是文件,则调用文件压缩方法 FileUtils .zipFilesToZipFile(dirPath, files[i], zouts); } else { // 如果是目录,则递归调用 FileUtils.zipDirectoryToZipFile(dirPath, files[i], zouts); } } } } /** * 将文件压缩到ZIP输出流 * @param dirPath 目录路径 * @param file 文件 * @param zouts 输出流 */ public static void zipFilesToZipFile(String dirPath, File file, ZipOutputStream zouts) { FileInputStream fin = null; ZipEntry entry = null; // 创建复制缓冲区 byte[] buf = new byte[4096]; int readByte = 0; if (file.isFile()) { try { // 创建一个文件输入流 fin = new FileInputStream(file); // 创建一个ZipEntry entry = new ZipEntry(getEntryName(dirPath, file)); // 存储信息到压缩文件 zouts.putNextEntry(entry); // 复制字节到压缩文件 while ((readByte = fin.read(buf)) != -1) { zouts.write(buf, 0, readByte); } zouts.closeEntry(); fin.close(); System.out .println("添加文件 " + file.getAbsolutePath() + " 到zip文件中!"); } catch (Exception e) { e.printStackTrace(); } } } /** * 获取待压缩文件在ZIP文件中entry的名字,即相对于跟目录的相对路径名 * @param dirPath 目录名 * @param file entry文件名 * @return */ private static String getEntryName(String dirPath, File file) { String dirPaths = dirPath; if (!dirPaths.endsWith(File.separator)) { dirPaths = dirPaths + File.separator; } String filePath = file.getAbsolutePath(); // 对于目录,必须在entry名字后面加上"/",表示它将以目录项存储 if (file.isDirectory()) { filePath += "/"; } int index = filePath.indexOf(dirPaths); return filePath.substring(index + dirPaths.length()); } public static String getAbsolutePath(String urlPath) { if(StringUtils.isBlank(urlPath)) { return ""; } else { return SpringContextHolder.getRootRealPath() + urlPath.substring(urlPath.indexOf("/", 1), urlPath.length()); } } /** * 将内容写入文件 * @param content * @param filePath */ public static void writeFile(String content, String filePath) { try { if (FileUtils.createFile(filePath)){ FileWriter fileWriter = new FileWriter(filePath, true); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); bufferedWriter.write(content); bufferedWriter.close(); fileWriter.close(); }else{ log.info("生成失败,文件已存在!"); } } catch (Exception e) { e.printStackTrace(); } } }
package com.midai.action.information; import java.io.File; import java.io.IOException; import java.util.ResourceBundle; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import bsh.StringUtil; import com.midai.action.BaseAction; import com.midai.pojo.Information; import com.midai.service.IInformationService; import com.midai.util.Constants; import com.midai.util.FileUtil; import com.midai.util.SerializeUtils; public class InformationAction extends BaseAction { private static final long serialVersionUID = 1L; @Autowired private IInformationService informationService; private String infoID; private Information info; //旧路径 private String appImgOldURL; private String pcImgOldURL; private String appHtmlOldURL; private String pcHtmlOldURL; //上传图片属性 private File appImg; private String appImgContentType; private String appImgFileName; private File pcImg; private String pcImgContentType; private String pcImgFileName; private File appHtml; private String appHtmlContentType; private String appHtmlFileName; private File pcHtml; private String pcHtmlContentType; private String pcHtmlFileName; /** * 上传文件大小验证 默认为2M * */ public void validateAddInformation(){ if(this.appImg!=null){ if(this.appImg.length()>Constants.MAXSIZE){ this.addFieldError("appImg", "手机端图片不能超过2M"); } } if(this.pcImg!=null){ if(this.pcImg.length()>Constants.MAXSIZE){ this.addFieldError("pcImg", "电脑端图片不能超过2M"); } } if(this.appHtml!=null){ if(this.appHtml.length()>Constants.MAXSIZE){ this.addFieldError("appHtml", "手机端网页不能超过2M"); } } if(this.pcHtml!=null){ if(this.pcHtml.length()>Constants.MAXSIZE){ this.addFieldError("pcHtml", "电脑端网页不能超过2M"); } } } /** * 添加公司新闻资讯 * @return */ public String addInformation(){ try { if(info==null){ info=new Information(); } ResourceBundle rb = ResourceBundle.getBundle("init"); String path = rb.getString("www.picture.path.read"); String localPath = rb.getString("www.picture.path"); if("1".equals(info.getUpdateFlg())){ if (this.appImg!=null) { String fileName = FileUtil.updateWWWFile(this.appImg,this.appImgFileName,Constants.UPLOAD_INFO_APP_PICTURE); info.setAppImgURL(path+"/"+Constants.UPLOAD_INFO_APP_PICTURE+"/" + fileName); File oldFile = new File(localPath+"/"+Constants.UPLOAD_INFO_APP_PICTURE+"/"+FileUtil.getFileNameWithExtension(appImgOldURL)); if(oldFile.isFile() || oldFile.exists()){ oldFile.delete(); }; }else{ if(StringUtils.isNotEmpty(appImgOldURL)){ info.setAppImgURL(path+"/"+Constants.UPLOAD_INFO_APP_PICTURE+"/"+FileUtil.getFileNameWithExtension(appImgOldURL)); } } if (this.pcImg!=null) { String fileName = FileUtil.updateWWWFile(this.pcImg,this.pcImgFileName,Constants.UPLOAD_INFO_PC_PICTURE); info.setPcImgURL(path+"/"+Constants.UPLOAD_INFO_PC_PICTURE+"/" + fileName); File oldFile = new File(localPath+"/"+Constants.UPLOAD_INFO_PC_PICTURE+"/"+FileUtil.getFileNameWithExtension(pcImgOldURL)); if(oldFile.isFile() || oldFile.exists()){ oldFile.delete(); }; }else{ if(StringUtils.isNotEmpty(pcImgOldURL)){ info.setPcImgURL(path+"/"+Constants.UPLOAD_INFO_PC_PICTURE+"/"+FileUtil.getFileNameWithExtension(pcImgOldURL)); } } if (this.appHtml!=null) { String fileName = FileUtil.updateWWWFile(this.appHtml,this.appHtmlFileName,Constants.UPLOAD_INFO_APP_HTML); info.setAppHtmlURL(path+"/"+Constants.UPLOAD_INFO_APP_HTML+"/" + fileName); File oldFile = new File(localPath+"/"+Constants.UPLOAD_INFO_APP_HTML+"/"+FileUtil.getFileNameWithExtension(appHtmlOldURL)); if(oldFile.isFile() || oldFile.exists()){ oldFile.delete(); }; }else{ if(StringUtils.isNotEmpty(appHtmlOldURL)){ info.setAppHtmlURL(path+"/"+Constants.UPLOAD_INFO_APP_HTML+"/"+FileUtil.getFileNameWithExtension(appHtmlOldURL)); } } if (this.pcHtml!=null) { String fileName = FileUtil.updateWWWFile(this.pcHtml,this.pcHtmlFileName,Constants.UPLOAD_INFO_PC_HTML); info.setPcHtmlURL(path+"/"+Constants.UPLOAD_INFO_PC_HTML+"/" + fileName); File oldFile = new File(localPath+"/"+Constants.UPLOAD_INFO_PC_HTML+"/"+FileUtil.getFileNameWithExtension(pcHtmlOldURL)); if(oldFile.isFile() || oldFile.exists()){ oldFile.delete(); }; }else{ if(StringUtils.isNotEmpty(pcHtmlOldURL)){ info.setPcHtmlURL(path+"/"+Constants.UPLOAD_INFO_PC_HTML+"/"+FileUtil.getFileNameWithExtension(pcHtmlOldURL)); } } informationService.updateInformation(info); }else{ if (this.appImg!=null) { String fileName = FileUtil.updateWWWFile(this.appImg,this.appImgFileName,Constants.UPLOAD_INFO_APP_PICTURE); info.setAppImgURL(path+"/"+Constants.UPLOAD_INFO_APP_PICTURE+"/" + fileName); } if (this.pcImg!=null) { String fileName = FileUtil.updateWWWFile(this.pcImg,this.pcImgFileName,Constants.UPLOAD_INFO_PC_PICTURE); info.setPcImgURL(path+"/"+Constants.UPLOAD_INFO_PC_PICTURE+"/" + fileName); } if (this.appHtml!=null) { String fileName = FileUtil.updateWWWFile(this.appHtml,this.appHtmlFileName,Constants.UPLOAD_INFO_APP_HTML); info.setAppHtmlURL(path+"/"+Constants.UPLOAD_INFO_APP_HTML+"/" + fileName); } if (this.pcHtml!=null) { String fileName = FileUtil.updateWWWFile(this.pcHtml,this.pcHtmlFileName,Constants.UPLOAD_INFO_PC_HTML); info.setPcHtmlURL(path+"/"+Constants.UPLOAD_INFO_PC_HTML+"/" + fileName); } informationService.addInfo(info); } } catch (Exception e) { e.printStackTrace(); } return SUCCESS; } }