日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文件压缩工具类

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件压缩工具类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

解決了中文亂碼問題

導入apache的jar包

<dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.10.5</version> </dependency>

代碼如下

package com.dist.util;import com.google.common.collect.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import org.slf4j.Logger; import org.slf4j.LoggerFactory;import java.io.*; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Function; import java.util.zip.CRC32; import java.util.zip.CheckedOutputStream;/*** 壓縮文件 無中文亂碼問題* @author qyp* 2018-3-24 下午05:12:30*/ public class ZipUtils {private final static Logger logger = LoggerFactory.getLogger(ZipUtils.class);public static void main(String[] args) throws Exception {File rootFile = new File("E:\\temp\\test");List<InputStream> ins = new ArrayList<>();List<String> names = new ArrayList<>();List<String> namePaths = Lists.newArrayList();File[] list = rootFile.listFiles();for (File f : list) {names.add(f.getName());namePaths.add(f.getAbsolutePath());ins.add(new FileInputStream(f));}//zipByInStream("e:\\temp\\a.zip", ins, names);//zipByFileNames("e:\\temp\\a.zip", namePaths);zipByFiles("e:\\temp\\a.zip", Arrays.asList(list));}/*** 將文件的流集合代表的文件壓縮成一個壓縮包并保存到指定位置* @param savePath 生成的壓縮包的位置* @param inputStreams 文件流集合* @param names 文件名稱集合* @throws Exception 如果文件路徑不存在或者壓縮失敗,那么久會拋異常*/public static void zipByInStream(String savePath, List<InputStream> inputStreams, List<String> names) throws Exception {ZipOutputStream zos = getOutPutStream(savePath);BufferedReader bufr = null;// 緩存輸出流try (BufferedOutputStream out = new BufferedOutputStream(zos)) {for (int i = 0, len = inputStreams.size(); i < len; i++) {//添加一個條目到壓縮包zos.putNextEntry(new ZipEntry(names.get(i)));int c;// StandardCharsets.ISO_8859_1 防止文件內容亂碼bufr = new BufferedReader(new InputStreamReader(inputStreams.get(i), StandardCharsets.ISO_8859_1));while ((c = bufr.read()) != -1) {out.write(c);}out.flush();if (bufr != null) {bufr.close();}}} catch (IOException r) {throw new RuntimeException("文件壓縮失敗");} finally {if (bufr != null) {bufr.close();}}}/*** 根據文件名集合獲取文件并壓縮* @param savePath 保存的壓縮文件路徑* @param targetFileNames 被壓縮的文件名集合(全路徑)* @throws Exception*/public static void zipByFileNames(String savePath, List<String> targetFileNames) throws Exception {Function<Object, String> nameFun = (obj) -> getFileName((String) obj);Function<Object, InputStream> inFun = (obj) -> {try {return new FileInputStream((String) obj);} catch (FileNotFoundException e) {e.printStackTrace();}return null;};zipFile(savePath, targetFileNames, nameFun, inFun);}/*** 根據文件集合生成壓縮文件* @param savePath 保存的壓縮文件路徑* @param targetFiles 被壓縮的文件集合* @throws Exception*/public static void zipByFiles(String savePath, List<File> targetFiles) throws Exception {Function<Object, String> nameFun = (obj) -> ((File)obj).getName();Function<Object, InputStream> inFun = (obj) -> {try {return new FileInputStream((File) obj);} catch (FileNotFoundException e) {e.printStackTrace();}return null;};zipFile(savePath, targetFiles, nameFun, inFun);}/*** 壓縮文件* @param savePath 保存的壓縮文件路徑* @param targets 被壓縮的對象(文件名集合(全路徑),或者文件集合)* @param nameFun 獲取文件名的Function對象* @param inFun 獲取InputStream的Function對象* @throws Exception*/private static void zipFile(String savePath, List<?> targets, Function<Object, String> nameFun, Function<Object, InputStream> inFun) throws Exception {ZipOutputStream zos = getOutPutStream(savePath);BufferedReader bufr = null;// 緩存輸出流try (BufferedOutputStream out = new BufferedOutputStream(zos)) {for (int i = 0, len = targets.size(); i < len; i++) {zos.putNextEntry(new ZipEntry(nameFun.apply(targets.get(i))));int c;bufr = new BufferedReader(new InputStreamReader(inFun.apply(targets.get(i)), StandardCharsets.ISO_8859_1));while ((c = bufr.read()) != -1) {out.write(c);}out.flush();if (bufr != null) {bufr.close();}}logger.info("成功壓縮{}個文件,保存地址為【{}】", targets.size(), savePath);} catch (IOException r) {throw new RuntimeException("文件壓縮失敗");} finally {if (bufr != null) {bufr.close();}}}/*** 獲取apache的ZipOutputStream流* @param savePath 保存壓縮文件的路徑* @return* @throws FileNotFoundException 如果保存路徑不存在,那么將會拋異常*/private static ZipOutputStream getOutPutStream(String savePath) throws FileNotFoundException {//輸出的壓縮原始文件流fileDir + "\\" + "詳情.zip"FileOutputStream f = new FileOutputStream(new File(savePath));// 計算和校驗文件CheckedOutputStream csum = new CheckedOutputStream(f, new CRC32());// 輸出的壓縮文件流ZipOutputStream zos = new ZipOutputStream(csum);zos.setComment("dist文件壓縮流");//設置壓縮工具右邊的文字編碼 防止右邊的說明文字亂碼zos.setEncoding(System.getProperty("sun.jnu.encoding"));return zos;}/*** 獲取文件名* @param filePath* @return*/public static String getFileName(String filePath) {int idx = StringUtils.lastIndexOf(filePath, File.separator);if (idx != -1) {return StringUtils.substring(filePath, idx + 1);}return filePath;}}

轉載于:https://www.cnblogs.com/qiaozhuangshi/p/11198157.html

總結

以上是生活随笔為你收集整理的文件压缩工具类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产无线乱码在线观看 | 黄色小视频免费看 | 国产精品一区二区免费看 | 久久精品国产99精品国产亚洲性色 | 一区二区麻豆 | 毛片一级在线观看 | 空姐毛片 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品图片 | 美女色呦呦 | 亚洲欧美韩国 | 老司机午夜性大片 | 欧美大片一区二区 | 日韩欧美视频在线播放 | 日韩美一区二区三区 | 无套暴操| 亚洲精品美女久久久 | 欧美人与性动交g欧美精器 国产在线视频91 | 午夜视频国产 | 一区二区三区资源 | 成人午夜网 | 爱爱的网站 | 操操操操操操 | 精品人妻一区二区三区久久嗨 | 九九热国产在线 | 亚洲欧美日韩视频一区 | 台湾a级艳片潘金莲 | 少妇高潮一区二区三区99刮毛 | 男女激情大尺度做爰视频 | 精品蜜桃一区二区三区 | 少妇激情视频 | 日日夜夜国产精品 | 日本免费小视频 | 精品无码一区二区三区免费 | 久久综合操 | 久久天天东北熟女毛茸茸 | 国产剧情一区 | 91官网入口| 少女与动物高清版在线观看 | 天天干天天干天天干天天 | 国产一级视频免费观看 | jizz日本18| 欧美美女性视频 | 四虎成人在线视频 | 性视频久久 | 日韩手机在线视频 | 亚洲毛片一区二区 | 国产精品99久久久久久久久久久久 | 裸体一区二区 | 中文字幕99页 | 日韩激情一区二区三区 | 噼里啪啦免费观看 | 男女涩涩 | 国产激情综合 | 久久精品香蕉视频 | 桃色视频网 | 久久久久久免费精品 | 超碰97在线资源 | youjizz.com在线观看 | 99草视频 | 女人做爰全过程免费观看美女 | 亚洲乱码国产乱码精品精剪 | 日本人妻一区二区三区 | 影音先锋中文在线 | 久久久蜜桃一区二区人 | 亚洲久久一区 | 国产91一区在线精品 | 国产av一区二区三区传媒 | 精品久久久久久久久久久 | 亚洲毛片在线观看 | 操操操操网 | 91口爆一区二区三区在线 | 软萌小仙自慰喷白浆 | 亚洲a免费| 亚洲情人网 | 96在线观看| 黑人操亚洲美女 | 激情网久久 | 国产ts网站 | 中文字幕在线播放一区 | 久操不卡 | 无码人妻精品一区二区蜜桃视频 | 97视频在线播放 | 欧美成人aaaaⅴ片在线看 | 色欲久久久天天天精品综合网 | 秋霞在线视频 | 久久综合色鬼 | 99色99| 伊人伊人网 | 天天看天天干 | 一级视频在线观看 | 图片区偷拍区小说区 | 艳妇乳肉豪妇荡乳av | 二区视频在线观看 | 美日韩精品视频 | 久久伊人色 | 青青草日本 | 欧美日韩免费高清 | 久久久久久久久蜜桃 |