java web 项目 常用 小工具类 ~~~~

举报
小米粒-biubiubiu 发表于 2020/12/03 01:36:46 2020/12/03
【摘要】                                 java web 项目 常用 小工具类 ~~~~ 一 、DateUtil  日期工具类 package com.devframe.common.util; import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util...

                                java web 项目 常用 小工具类 ~~~~

一 、DateUtil  日期工具类


  
  1. package com.devframe.common.util;
  2. import java.text.SimpleDateFormat;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.List;
  7. /**
  8. * @author zhangkai
  9. * @ClassName: DateUtil
  10. * @Description: 日期工具类
  11. * @date 2017年9月22日 上午8:52:33
  12. */
  13. public class DateUtil {
  14. /**
  15. * SimpleDateFormat不是线程安全的. 在多线程并行处理的情况下, 会得到非预期的值. 这个错误非常普遍!
  16. * <p>所以只给定格式,自己new<p/>
  17. * "yyyy-MM-dd": 2017-09-22<br>
  18. * "yyyy-MM-dd hh:mm:ss": 2017-09-22 9:27:41<br>
  19. * "yyyy-MM-dd hh:mm:ss EE": 2017-09-22 9:27:41 星期五<br>
  20. * "yyyy年MM月dd日 hh:mm:ss EE": 2017年09月22日 9:27:41 星期五<br>
  21. */
  22. public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
  23. public static final String DATE_FORMAT1 = "yyyy-MM-dd";
  24. public static final String DATE_FORMAT2="yyyyMMddHHmmss";
  25. public static final String DATE_FORMAT3= "yyMMddHHmmss";
  26. public static final String DATE_FORMAT4 = "yyyy-MM-dd 00:00:00";
  27. /**
  28. * 时间戳转换成日期格式字符串
  29. *
  30. * @param seconds 精确到秒的字符串
  31. * @param format 指定格式
  32. * @return String
  33. */
  34. public static String timeStamp2Datestr(String seconds, String format) {
  35. if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {
  36. return "";
  37. }
  38. if (format == null || format.isEmpty()) {
  39. format = DATE_FORMAT;
  40. }
  41. SimpleDateFormat sdf = new SimpleDateFormat(format);
  42. return sdf.format(new Date(Long.valueOf(seconds + "000")));
  43. }
  44. /**
  45. * 日期格式字符串转换成时间戳
  46. *
  47. * @param date_str 字符串日期
  48. * @param format format
  49. * @return String
  50. */
  51. public static String datestr2TimeStamp(String date_str, String format) {
  52. if (format == null || format.isEmpty()) {
  53. format = DATE_FORMAT;
  54. }
  55. try {
  56. SimpleDateFormat sdf = new SimpleDateFormat(format);
  57. return String.valueOf(sdf.parse(date_str).getTime() / 1000);
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. return "";
  62. }
  63. /**
  64. * date 转换成时间戳字符串
  65. *
  66. * @param date date
  67. * @return java.lang.String
  68. */
  69. public static String date2TimeStamp(Date date) {
  70. if (date == null) {
  71. date = new Date();
  72. }
  73. try {
  74. return String.valueOf(date.getTime());
  75. } catch (Exception e) {
  76. e.printStackTrace();
  77. }
  78. return "";
  79. }
  80. /**
  81. * 取得当前时间戳(精确到秒)
  82. *
  83. * @return String
  84. */
  85. public static String timeStamp() {
  86. long time = System.currentTimeMillis();
  87. return String.valueOf(time / 1000);
  88. }
  89. /**
  90. * date转换成string
  91. *
  92. * @param date date
  93. * @param format formatStr
  94. * @return String
  95. */
  96. public static String date2String(Date date, String format) {
  97. if (date == null) {
  98. return null;
  99. }
  100. if (format == null || format.isEmpty()) {
  101. format = DATE_FORMAT;
  102. }
  103. try {
  104. SimpleDateFormat sdf = new SimpleDateFormat(format);
  105. return sdf.format(date);
  106. } catch (Exception e) {
  107. e.printStackTrace();
  108. }
  109. return null;
  110. }
  111. /**
  112. * 时间戳转成Date
  113. *
  114. * @param timeStamp 时间戳字符串
  115. * @return Date
  116. */
  117. public static Date timeStamp2Date(String timeStamp) {
  118. if (timeStamp == null || timeStamp.isEmpty()) {
  119. return null;
  120. }
  121. try {
  122. if (timeStamp.length() == 10) {
  123. return new Date(Long.valueOf(timeStamp + "000"));
  124. }
  125. if (timeStamp.length() == 13) {
  126. return new Date(Long.valueOf(timeStamp));
  127. }
  128. } catch (Exception e) {
  129. e.printStackTrace();
  130. }
  131. return null;
  132. }
  133. /**
  134. * 时间字符串转换成Date
  135. *
  136. * @param dateString date字符串
  137. * @param format 转换格式字符串
  138. * @return Date
  139. */
  140. public static Date string2Date(String dateString, String format) {
  141. if (StringUtil.isNull(dateString)) {
  142. return null;
  143. }
  144. if (StringUtil.isNull(format)) {
  145. format = DATE_FORMAT;
  146. }
  147. try {
  148. SimpleDateFormat sdf = new SimpleDateFormat(format);
  149. return sdf.parse(dateString);
  150. } catch (Exception e) {
  151. e.printStackTrace();
  152. }
  153. return null;
  154. }
  155. /**
  156. * 返回当前时间精确到秒的时间戳
  157. *
  158. * @return Long
  159. */
  160. public static Long getSecondTimestamp() {
  161. return getSecondTimestamp(null);
  162. }
  163. /**
  164. * 获取精确到秒的时间戳,默认返回当前时间
  165. *
  166. * @return Long
  167. */
  168. public static Long getSecondTimestamp(Date date) {
  169. if (null == date) {
  170. date = new Date();
  171. }
  172. String timestamp = String.valueOf(date.getTime());
  173. int length = timestamp.length();
  174. if (length > 3) {
  175. return Long.valueOf(timestamp.substring(0, length - 3));
  176. } else {
  177. return 0L;
  178. }
  179. }
  180. /**
  181. * 返回传入时间与当前时间间隔秒数
  182. *
  183. * @param date date
  184. * @return long
  185. */
  186. public static long getTimeDelta(Date date) {
  187. return getTimeDelta(new Date(), date);
  188. }
  189. /**
  190. * 返回指定时间间隔秒数
  191. *
  192. * @param date1 date1
  193. * @param date2 date2
  194. * @return long
  195. */
  196. public static long getTimeDelta(Date date1, Date date2) {
  197. if (date1 == null) {
  198. throw new NullPointerException();
  199. }
  200. if (date2 == null) {
  201. return 0L;
  202. }
  203. return Math.abs(date1.getTime() - date2.getTime()) / 1000;
  204. }
  205. public static double getTimeDeltaByHour(Date date) {
  206. if (date == null) {
  207. throw new NullPointerException("date required not null");
  208. }
  209. return Math.abs(System.currentTimeMillis() - date.getTime()) / (1000 * 3600);
  210. }
  211. /**
  212. * 获取当前日期实在周的星期一和星期日的日期
  213. * @param args
  214. */
  215. public static List<String > getTimeInterval() {
  216. Calendar cal = Calendar.getInstance();
  217. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
  218. // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
  219. cal.setFirstDayOfWeek(Calendar.MONDAY);
  220. // 获得当前日期是一个星期的第几天
  221. int day = cal.get(Calendar.DAY_OF_WEEK);
  222. // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
  223. cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);
  224. //星期一
  225. String imptimeBegin = sdf.format(cal.getTime());
  226. cal.add(Calendar.DATE, 6);
  227. //星期日
  228. String imptimeEnd = sdf.format(cal.getTime());
  229. List<String> list = new ArrayList<String>();
  230. list.add(imptimeBegin);
  231. list.add(imptimeEnd);
  232. return list;
  233. }
  234. /*
  235. * 计算某一天所在周的星期一和星期天的日期
  236. */
  237. public static String[] convertWeekByDate(String s) throws Exception {
  238. String result[] = new String[2];
  239. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
  240. Date time = sdf.parse(s);
  241. Calendar cal = Calendar.getInstance();
  242. cal.setTime(time);
  243. // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
  244. int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
  245. if (1 == dayWeek) {
  246. cal.add(Calendar.DAY_OF_MONTH, -1);
  247. }
  248. cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一
  249. int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
  250. cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值
  251. String imptimeBegin = sdf.format(cal.getTime()); //所在周的星期一
  252. result[0] = imptimeBegin;
  253. cal.add(Calendar.DATE, 6);
  254. String imptimeEnd = sdf.format(cal.getTime()); //所在周的星期日
  255. result[1] = imptimeEnd;
  256. return result;
  257. }
  258. public static void main(String[] args) {
  259. System.out.println(DateUtil.getSecondTimestamp());
  260. System.out.println(DateUtil.getTimeDelta(new Date()));
  261. }
  262. }

二 、JaxbUtil  Java 对象和 xml 互转工具类


  
  1. package com.devframe.common.util;
  2. import java.io.StringReader;
  3. import java.io.StringWriter;
  4. import javax.xml.bind.JAXBContext;
  5. import javax.xml.bind.Marshaller;
  6. import javax.xml.bind.Unmarshaller;
  7. /**
  8. * @ClassName:
  9. * @Description:
  10. * @author DuanZhaoXu
  11. * @date 2018年8月23日上午8:58:52
  12. */
  13. public class JaxbXmlUtil {
  14. /**
  15. * JavaBean转换成xml
  16. * * 默认编码UTF-8
  17. *
  18. * @param obj
  19. * @return
  20. */
  21. public static String convertToXml(Object obj) {
  22. return convertToXml(obj, "UTF-8");
  23. }
  24. /**
  25. * JavaBean转换成xml
  26. * @param obj
  27. * @param encoding
  28. * @return
  29. */
  30. public static String convertToXml(Object obj, String encoding) {
  31. String result = null;
  32. try {
  33. JAXBContext context = JAXBContext.newInstance(obj.getClass());
  34. Marshaller marshaller = context.createMarshaller();
  35. marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
  36. marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
  37. StringWriter writer = new StringWriter();
  38. marshaller.marshal(obj, writer);
  39. result = writer.toString();
  40. } catch (Exception e) {
  41. e.printStackTrace();
  42. }
  43. return result;
  44. }
  45. /**
  46. * xml转换成JavaBean
  47. * @param xml
  48. * @param c
  49. * @return
  50. */
  51. @SuppressWarnings("unchecked")
  52. public static <T> T converyToJavaBean(String xml, Class<T> c) {
  53. T t = null;
  54. try {
  55. JAXBContext context = JAXBContext.newInstance(c);
  56. Unmarshaller unmarshaller = context.createUnmarshaller();
  57. t = (T) unmarshaller.unmarshal(new StringReader(xml));
  58. } catch (Exception e) {
  59. e.printStackTrace();
  60. }
  61. return t;
  62. }
  63. }

三 、MapRemoveNullUtil  移除map中空key或者value空值 的工具类


  
  1. package com.devframe.common.util;
  2. import java.util.ArrayList;
  3. import java.util.Collection;
  4. import java.util.HashMap;
  5. import java.util.Iterator;
  6. import java.util.Map;
  7. import java.util.Set;
  8. public class MapRemoveNullUtil {
  9. /**
  10. * 移除map中空key或者value空值
  11. *
  12. * @param map
  13. */
  14. public static void removeNullEntry(Map map) {
  15. removeNullKey(map);
  16. removeNullValue(map);
  17. }
  18. /**
  19. * 移除map的空key
  20. *
  21. * @param map
  22. * @return
  23. */
  24. public static void removeNullKey(Map map) {
  25. Set set = map.keySet();
  26. for (Iterator iterator = set.iterator(); iterator.hasNext();) {
  27. Object obj = (Object) iterator.next();
  28. remove(obj, iterator);
  29. }
  30. }
  31. /**
  32. * 移除map中的value空值
  33. *
  34. * @param map
  35. * @return
  36. */
  37. public static void removeNullValue(Map map) {
  38. Set set = map.keySet();
  39. for (Iterator iterator = set.iterator(); iterator.hasNext();) {
  40. Object obj = (Object) iterator.next();
  41. Object value = (Object) map.get(obj);
  42. remove(value, iterator);
  43. }
  44. }
  45. /**
  46. * Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator
  47. * 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,
  48. * 所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出
  49. * java.util.ConcurrentModificationException 异常。 所以 Iterator
  50. * 在工作的时候是不允许被迭代的对象被改变的。 但你可以使用 Iterator 本身的方法 remove() 来删除对象,
  51. * Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
  52. *
  53. * @param obj
  54. * @param iterator
  55. */
  56. private static void remove(Object obj, Iterator iterator) {
  57. if (obj instanceof String) {
  58. String str = (String) obj;
  59. if (StringUtil.isNull(str)) {
  60. iterator.remove();
  61. }
  62. } else if (obj instanceof Collection) {
  63. Collection col = (Collection) obj;
  64. if (col == null || col.isEmpty()) {
  65. iterator.remove();
  66. }
  67. } else if (obj instanceof Map) {
  68. Map temp = (Map) obj;
  69. if (temp == null || temp.isEmpty()) {
  70. iterator.remove();
  71. }
  72. } else if (obj instanceof Object[]) {
  73. Object[] array = (Object[]) obj;
  74. if (array == null || array.length <= 0) {
  75. iterator.remove();
  76. }
  77. } else {
  78. if (obj == null) {
  79. iterator.remove();
  80. }
  81. }
  82. }
  83. public static void main(String[] args) {
  84. Map map = new HashMap();
  85. map.put(1, "第一个值是数字");
  86. map.put("2", "第2个值是字符串");
  87. map.put(new String[] { "1", "2" }, "第3个值是数组");
  88. map.put(new ArrayList(), "第4个值是List");
  89. map.put(new HashMap(), "Map 无值");
  90. map.put("5", "第5个");
  91. map.put("6", null);
  92. map.put("asd", "asdasd");
  93. map.put("7", "");
  94. map.put("8", " ");
  95. System.out.println(map);
  96. MapRemoveNullUtil.removeNullKey(map);
  97. System.out.println();
  98. System.out.println(map);
  99. MapRemoveNullUtil.removeNullValue(map);
  100. System.out.println();
  101. System.out.println(map);
  102. }
  103. }

 四、MD5Util md5 加密工具类


  
  1. package com.devframe.common.util;
  2. import java.security.MessageDigest;
  3. import java.security.NoSuchAlgorithmException;
  4. /**
  5. * @ClassName: MD5Util
  6. * @Description: MD5加密工具类
  7. * @author DuanZhaoXu
  8. * @date 2018年3月13日 上午9::15:25
  9. *
  10. */
  11. public class MD5Util {
  12. private MD5Util() {
  13. }
  14. public static String getEncryption(String originString) {
  15. String result = "";
  16. try {
  17. if (originString != null) {
  18. try {
  19. // 指定加密的方式为MD5
  20. MessageDigest md = MessageDigest.getInstance("MD5");
  21. // 进行加密运算
  22. byte bytes[] = md.digest(originString.getBytes("ISO8859-1"));
  23. for (int i = 0; i < bytes.length; i++) {
  24. // 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位
  25. String str = Integer.toHexString(bytes[i] & 0xFF);
  26. if (str.length() == 1) {
  27. str += "F";
  28. }
  29. result += str;
  30. }
  31. } catch (NoSuchAlgorithmException e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. } catch (Exception e) {
  36. Log.error(e);
  37. }
  38. return result;
  39. }
  40. public static void main(String[] args) {
  41. String aa = MD5Util.getEncryption("12345");
  42. System.out.println(aa);
  43. }
  44. }

五 、Properties  工具类 


  
  1. package com.devframe.common.util;
  2. import java.io.FileInputStream;
  3. import java.io.IOException;
  4. import java.io.InputStreamReader;
  5. import java.net.URL;
  6. import java.util.Properties;
  7. public class PropertyUtil {
  8. private static final Properties PROP = new Properties();
  9. /**
  10. * 设置配置文件的路径
  11. */
  12. private static final String PATH = "/config.properties";
  13. /**
  14. * 读取配置文件的内容(key,value)
  15. *
  16. * @param key key
  17. * @return key对应的value
  18. */
  19. public static String get(String key) {
  20. if (PROP.isEmpty()) {
  21. FileInputStream in = null;
  22. InputStreamReader reader = null;
  23. try {
  24. URL url = PropertyUtil.class.getResource(PATH);
  25. in = new FileInputStream(url.getPath());
  26. reader = new InputStreamReader(in, "utf-8");
  27. PROP.load(reader);
  28. } catch (IOException e) {
  29. Log.error(e);
  30. } finally {
  31. if (reader != null) {
  32. try {
  33. reader.close();
  34. in.close();
  35. } catch (IOException e) {
  36. Log.error(e);
  37. }
  38. }
  39. }
  40. }
  41. return PROP.getProperty(key);
  42. }
  43. }

六 、WinRarUtil   调用WinRAR.exe 解压rar文件工具类


  
  1. package com.devframe.common.util;
  2. import java.io.File;
  3. /**
  4. * 调用WinRAR.exe 解压rar文件
  5. * @ClassName: WinRarUtil
  6. * @Description: WinRarUtil
  7. * @author DuanZhaoXu
  8. * @date 2018年9月15日下午7:21:19
  9. */
  10. public class WinRarUtil {
  11. //服务器需要安装winrar
  12. public static final String winrarPath = "C://Program Files//WinRAR//WinRAR.exe";
  13. public static boolean unrar(String rarFile, String target) {
  14. boolean bool = false;
  15. File f=new File(rarFile);
  16. if(!f.exists()){
  17. return false;
  18. }
  19. String cmd = winrarPath + " X " + f.getPath() + " "+target;
  20. try {
  21. Process proc = Runtime.getRuntime().exec(cmd);
  22. if (proc.waitFor() != 0) {
  23. if (proc.exitValue() == 0) {
  24. bool = false;
  25. }
  26. } else {
  27. bool = true;
  28. }
  29. } catch (Exception e) {
  30. e.printStackTrace();
  31. }
  32. return bool;
  33. }
  34. public static void main(String[] args) {
  35. WinRarUtil.unrar("C:\\resultdata\\save\\devallinone.rar","C:\\resultdata\\save");
  36. }
  37. }

七、 zip4jUtil   解压压缩 zip 文件工具类


  
  1. package com.devframe.common.util;
  2. import java.io.File;
  3. import java.util.ArrayList;
  4. import java.util.Date;
  5. import java.util.HashMap;
  6. import java.util.List;
  7. import java.util.Map;
  8. import org.apache.commons.io.FileUtils;
  9. import org.apache.commons.lang3.StringUtils;
  10. import com.devframe.common.exception.DevFrameException;
  11. import net.lingala.zip4j.core.ZipFile;
  12. import net.lingala.zip4j.exception.ZipException;
  13. import net.lingala.zip4j.model.ZipParameters;
  14. import net.lingala.zip4j.util.Zip4jConstants;
  15. /**
  16. * Created by wzj on 2017/11/27.
  17. */
  18. public class Zip4jUtil {
  19. public static void main(String[] args) {
  20. try {
  21. // zip("F:\\测试1", "F:\\测试1.zip", null);
  22. // long time = System.currentTimeMillis();
  23. // unZip("D:\\globalPathPlanning_v1.11_java.zip","D:\\globalPathPlanning_v1.11_java",null);
  24. // long time2 = System.currentTimeMillis();
  25. // System.out.println(time2 - time);
  26. // ZipFile zipFile = new ZipFile("F:\\HEB_Test1.zip");
  27. List<Map<String, Object>> result = getZipTiffFiles("C:\\resultdata\\save\\test2.zip", "C:\\resultdata\\save\\", "txt");
  28. for (Map<String, Object> map : result) {
  29. System.out.println("文件名称:" + map.get("fileName") + "<>" + "上传时间:" + map.get("uploadTime"));
  30. }
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. }
  35. /**
  36. * 解压并获取 zip 文件里面的文件 名称 路径 和 上传时间
  37. *
  38. * @param srcFile
  39. * @return List<Map<String, Object>>
  40. * @throws ZipException
  41. */
  42. public static List<Map<String, Object>> getZipTiffFiles(String srcFile, String dest, String type)
  43. throws ZipException {
  44. File file = new File(srcFile);
  45. if (!file.exists()) {
  46. throw new DevFrameException("文件不存在");
  47. }
  48. // 文件名称带有.zip后缀
  49. String fileName = file.getName();
  50. // 文件名称不带zip后缀
  51. String fileNameNoZip = fileName.substring(0, file.getName().lastIndexOf("."));
  52. // 解压
  53. unZip(srcFile, dest);
  54. // 解压之后的文件夹
  55. File file2 = new File(dest + fileNameNoZip);
  56. String uploadTime = DateUtil.date2String(new Date(), DateUtil.DATE_FORMAT);
  57. List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();
  58. if(file2!=null) {
  59. result = recursionGetTifFiles(result, type, uploadTime, file2);
  60. }
  61. FileUtils.deleteQuietly(file);
  62. return result;
  63. }
  64. public static List<Map<String, Object>> recursionGetTifFiles(List<Map<String, Object>> result, String type,
  65. String uploadTime, File file) {
  66. File[] subFiles = file.listFiles();
  67. if (subFiles != null && subFiles.length > 0) {
  68. for (File subFile : subFiles) {
  69. String fileName = subFile.getName();
  70. String filePath = subFile.getPath();
  71. if (subFile.isFile()) {
  72. if (StringUtils.isBlank(type)) {
  73. result = add(result, fileName, filePath, uploadTime);
  74. } else {
  75. if (fileName.endsWith("." + type)) {
  76. result = add(result, fileName, filePath, uploadTime);
  77. }
  78. }
  79. } else if (subFile.isDirectory()) {
  80. result = recursionGetTifFiles(result, type, uploadTime, subFile);
  81. }
  82. }
  83. }
  84. return result;
  85. }
  86. public static List<Map<String, Object>> add(List<Map<String, Object>> result, String fileName, String filePath,
  87. String uploadTime) {
  88. Map<String, Object> map = new HashMap<String, Object>();
  89. map.put("name", fileName);
  90. map.put("path", filePath);
  91. map.put("updateTime", uploadTime);
  92. result.add(map);
  93. return result;
  94. }
  95. /**
  96. * 压缩(无需密码)
  97. *
  98. * @param srcFile
  99. * @param dest
  100. * @throws ZipException
  101. */
  102. public static void zip(String srcFile, String dest) throws ZipException {
  103. zip(srcFile, dest, null);
  104. }
  105. /**
  106. * 压缩
  107. *
  108. * @param srcFile 源目录
  109. * @param dest 要压缩的目录
  110. * @param passwd 密码 不是必填
  111. * @throws ZipException 异常
  112. */
  113. public static void zip(String srcFile, String dest, String passwd) throws ZipException {
  114. File srcfile = new File(srcFile);
  115. // 创建目标文件
  116. String destname = buildDestFileName(srcfile, dest);
  117. ZipParameters par = new ZipParameters();
  118. // 压缩级别
  119. // static final int COMP_STORE = 0;(仅打包,不压缩) (对应好压的存储)
  120. // static final int COMP_DEFLATE = 8;(默认) (对应好压的标准)
  121. // static final int COMP_AES_ENC = 99;
  122. par.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
  123. // 压缩等级
  124. // static final int DEFLATE_LEVEL_FASTEST = 1;
  125. // static final int DEFLATE_LEVEL_FAST = 3;
  126. // static final int DEFLATE_LEVEL_NORMAL = 5;
  127. // static final int DEFLATE_LEVEL_MAXIMUM = 7;
  128. // static final int DEFLATE_LEVEL_ULTRA = 9;
  129. par.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
  130. if (passwd != null) {
  131. par.setEncryptFiles(true);
  132. // 设置加密方式为0, 默认 为-1,没有加密方式会报错
  133. par.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
  134. par.setPassword(passwd.toCharArray());
  135. }
  136. ZipFile zipfile = new ZipFile(destname);
  137. if (srcfile.isDirectory()) {
  138. zipfile.addFolder(srcfile, par);
  139. } else {
  140. zipfile.addFile(srcfile, par);
  141. }
  142. }
  143. /**
  144. * @param zipFile
  145. * @param dest
  146. * @throws ZipException
  147. */
  148. public static void unZip(String zipFile, String dest) throws ZipException {
  149. unZip(zipFile, dest, null);
  150. }
  151. /**
  152. * 解压
  153. *
  154. * @param zipfile 压缩包文件
  155. * @param dest 目标文件
  156. * @param passwd 密码
  157. * @throws ZipException 抛出异常
  158. */
  159. public static void unZip(String zipfile, String dest, String passwd) throws ZipException {
  160. ZipFile zfile = new ZipFile(zipfile);
  161. zfile.setFileNameCharset("GBK");// 在GBK系统中需要设置utf-8,windows系统设置GBK
  162. if (!zfile.isValidZipFile()) {
  163. throw new ZipException("压缩文件不合法,可能已经损坏!");
  164. }
  165. // File file = new File(dest);
  166. // if (file.isDirectory() && !file.exists())
  167. // {
  168. // file.mkdirs();
  169. // }
  170. if (zfile.isEncrypted()) {
  171. zfile.setPassword(passwd.toCharArray());
  172. }
  173. zfile.extractAll(dest);
  174. }
  175. public static String buildDestFileName(File srcfile, String dest) {
  176. if (dest == null) {
  177. if (srcfile.isDirectory()) {
  178. dest = srcfile.getParent() + File.separator + srcfile.getName() + ".zip";
  179. } else {
  180. String filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));
  181. dest = srcfile.getParent() + File.separator + filename + ".zip";
  182. }
  183. } else {
  184. createPath(dest);// 路径的创建
  185. if (dest.endsWith(File.separator)) {
  186. String filename = "";
  187. if (srcfile.isDirectory()) {
  188. filename = srcfile.getName();
  189. } else {
  190. filename = srcfile.getName().substring(0, srcfile.getName().lastIndexOf("."));
  191. }
  192. dest += filename + ".zip";
  193. }
  194. }
  195. return dest;
  196. }
  197. private static void createPath(String dest) {
  198. File destDir = null;
  199. if (dest.endsWith(File.separator)) {
  200. destDir = new File(dest);// 给出的是路径时
  201. } else {
  202. destDir = new File(dest.substring(0, dest.lastIndexOf(File.separator)));
  203. }
  204. if (!destDir.exists()) {
  205. destDir.mkdirs();
  206. }
  207. }
  208. }

 

文章来源: blog.csdn.net,作者:血煞风雨城2018,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_31905135/article/details/83343038

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。