从zip中读取文件 合并到指定的文件中

引入 commons-io 版本可以选择更高的版本

   <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>

具体代码如下:

package work;import java.io.*;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipInputStream;/*** @author  qianxl*/
public class ZipCopyTools {public static void batchCopyZipContentToDirectory(String[] source, String des) {InputStream in = null;ZipInputStream zin = null;try {for (String src : source) {//读取文件路径//String path = "C:\\Users\\Administrator\\Desktop\\sql改造\\sql改造补丁\\medext_mm\\temp\\patch_mmmps_medext_1622031243072.zip";String path = src;//存储文件目录路径//String des = "C:/Users/Administrator/Desktop/sql改造/desc/";ZipFile zf = new ZipFile(path);//获取zip 文件格式String zipEncode = getCharsetFromSourceFile(path);System.out.println(zf.getName() + zipEncode + "fileEncode");// 文件输入流in = new BufferedInputStream(new FileInputStream(path));// zip文件的编码格式Charset charset = Charset.forName(zipEncode);// This class implements an input stream filter for reading files in the ZIP file format.zin = new ZipInputStream(in, Charset.forName(zipEncode));// 压缩文件实体ZipEntry ze;String zipDirectory = path.substring(0, path.lastIndexOf("."));while ((ze = zin.getNextEntry()) != null) {// 压缩文件的绝对路径//String zipFilePath = zipDirectory +"/"+ ze.toString();// 获取.class .java 文件的压缩格式// String fileEncode = getCharsetFromSourceFile(zipFilePath);String fileEncode =zipEncode;if (ze.toString().endsWith("java") || ze.toString().endsWith("class")) {BufferedReader br = new BufferedReader(new InputStreamReader(zf.getInputStream(ze), fileEncode));//String fieldPath = ze.getName().toString();//获取zip文件路径path = fieldPath;// 获取压缩文件 .java .class 的路径String directory = fieldPath.substring(0, fieldPath.lastIndexOf("/"));//创建文件夹boolean mkdirs = new File(des + directory).mkdirs();// 目的文件.class .java 文件的路径path = des + path;BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(path)), fileEncode));String line;while ((line = br.readLine()) != null) {System.out.println(line.toString());bw.write(line.toString());bw.write(System.getProperties().getProperty("line.separator"));}bw.flush();bw.close();br.close();}System.out.println();}zin.closeEntry();}} catch (IOException e) {e.printStackTrace();} finally {close(zin, in);}}public static void main(String[] args) {String des = "C:/Users/Administrator/Desktop/desc/";//String source = String filedesc = "C:\\Users\\Administrator\\Desktop\\descfile\\";List<File> fileList = new ArrayList<>();List<File> zips = getSuffixFilePaths(fileList, filedesc, "zip");// 返回 zip 文件数组值// System.out.println(zips.get(0).getAbsoluteFile());String[] src = zips.stream().map(p -> {return getAvailablePath(p);}).toArray(String[]::new);batchCopyZipContentToDirectory(src, des);}/*** getFileDirectory** @param fileList* @Return getFileDirectory <java.util.List<java.lang.String>>*/public static List<String> getFileDirectory(List<File> fileList) {fileList.stream().forEach(p -> {p.getPath().substring(0, p.getPath().lastIndexOf("/"));});return null;}/*** 获取文件编码** @param fileName* @return* @throws IOException https://my.oschina.net/davz/blog/4470673*/private static String getCharsetFromSourceFile(String fileName) throws IOException {BufferedInputStream bin = new BufferedInputStream(new FileInputStream(fileName));int p = (bin.read() << 8) + bin.read();String code = null;switch (p) {case 0xefbb:code = "UTF-8";break;case 0xfffe:code = "Unicode";break;case 0xfeff:code = "UTF-16BE";break;default:code = "GBK";}return code;}/*** 关闭给定的io流** @url https://blog.csdn.net/u012250875/article/details/78341874*/public static void close(Closeable... closes) {for (Closeable closeable : closes) {try {if (closeable != null) {closeable.close();}} catch (IOException e) {e.printStackTrace();}}}/*** getAvailablePath* *@param  file** @Return getAvailablePath <java.lang.String>*/private static String getAvailablePath(File file) {return file.getPath().replace('\\', '/');}/*** getSuffixFilePaths** @param fileList* @param path* @param fileSuffix* @Return getSuffixFilePaths <java.util.List<java.io.File>>*/public static List<File> getSuffixFilePaths(List<File> fileList, String path, String fileSuffix) {File file = new File(path);File[] files = file.listFiles();if (files == null) {return null;} else {for (int i = 0; i < files.length; i++) {// 判断是否是文件夹if (files[i].isDirectory()) {// 递归调用getFiles方法,得到所有的文件getSuffixFilePaths(fileList, getAvailablePath(files[i]), fileSuffix);// 只处理fileSuffix后缀的文档} else if (files[i].getName().lastIndexOf(fileSuffix) != -1) {// copyFileAndAddPackageName(files[i]);// 添加到文件集合中fileList.add(files[i]);}/// System.out.println(files[i].getAbsolutePath().replace('//',/// '/'));}}return fileList;}// 读取xml 文件 并将xml 文件中的文件}/*** 文件的路径* @param fileName*/// 堆栈方式实现public static void loopDeleteFields(File fileName) {Stack<File> stack = new Stack<>();// 存储文件夹Stack<File> stackDir= new Stack<>();// stack 初始化stack.add(fileName);stackDir.add(fileName);while (!stack.isEmpty()) {// 弹出fileFile file = stack.pop();File[] files = file.listFiles();if (files != null && files.length > 0) {for (File f : files) {if (f.isDirectory()) {stack.add(f);//存储文件夹  先进后出 FILOstackDir.add(f);} else {f.delete();}}}}// 删除文件夹while (!stackDir.isEmpty()){File file = stackDir.pop();file.delete();}// System.out.println("删除--");}

参考的博客 1 .

参考的博客 2

从zip中读取文件 合并到指定的文件中相关推荐

  1. 用python将指定目录下的所有json文件合并成一个csv文件

    #!/usr/bin/env python # -*- encoding: utf-8 -*-import sys import json import os import pandas as pd ...

  2. 把一个文件夹下的所有csv文件合并到一个csv文件中,并添加文件名作为列名

    DEAM数据集的标签如图所示,共有1802个csv文件,每首音乐的特征单独存储在一个csv文件中: 现在想要将这些csv文件合并到一个csv文件中,同时用文件名作为列名.用python代码实现如下: ...

  3. 多个pdf文件合并为一个pdf文件

    简单代码搞定将多个pdf文件合并为同一个pdf文件,有python你还有啥担心的呢?在日常生活中需要用到的将多个pdf文件合并为同一个pdf文件的请看过来,不要再去网上下载这啊那的转换软件了.话不多说 ...

  4. PDF合并:如何将两个PDF文件合并成一个PDF文件

    PDF文件是我们在工作中经常能够用到的文件,尤其是在办公中会遇到很多PDF文件在传输的过程中为了传输更快被拆分成了几个PDF文件,但是要找一个完整的PDF文件就需要把两个被拆分的PDF文件合并成一个P ...

  5. 如何将多个PDF文件合并为一个PDF文件?PDF文件合并教程

    如何合并PDF文件?PDF我们都不陌生,很多人经常在网站上搜狐各种类型的PDF资料,但是有时因为资料太多不好管理和查阅,如果可以把同类型的多个PDF文件合并为一个PDF文件,那无论是保存还是查阅,都会 ...

  6. 怎么将几张pdf合并成一张_如何将多个pdf文件合并成一个pdf文件?

    原标题:如何将多个pdf文件合并成一个pdf文件? 我很喜欢使用PDF文件格式,为什么呢?因为PDF具有许多其他电子文档格式无法相比的优点.PDF文件格式可以将文字.字型.格式.颜色及独立于设备和分辨 ...

  7. 将两个HEX文件合并成一个HEX文件

    将两个HEX文件合并成一个HEX文件 文章目录 将两个HEX文件合并成一个HEX文件 系统环境 1. 生成BootLoader和app的HEX文件 2. 将两个HEX文件合并成一个HEX 3. 利用J ...

  8. 怎么将多个CSV文件合并成一个CSV文件

    最近要批量将几百个CSV文件合成一个文件,最开始是一个个复制粘贴的,进度太慢了,后面发现用一个小办法可以几秒钟将几百个CSV文件合并成一个文件,分享给大家. 第一步:将需要合并的csv文件夹全部放在D ...

  9. 如何在SQL Server 2016中使用R合并和拆分CSV文件

    介绍 (Introduction) From time to time, we may encounter the following scenarios when dealing with data ...

最新文章

  1. 模式窗口window.open造成Session丢失的解决方法
  2. windows上下载redis扩展
  3. 警告:push.default未设置;它的隐含值在Git 2.0中发生了变化
  4. PowerShell-1.入门及其常用
  5. Linux cpuidle framework(4)_menu governor
  6. ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架?
  7. currentTitle的用法
  8. labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...
  9. EduSoho网络课堂通用版
  10. C案例:打印斐波拉契数列
  11. imutils.path
  12. 几种数据库快速csv入库方式整理
  13. 动态将ASPX生成HTML网页并将网页导出PDF
  14. keepalived(二)vip漂移
  15. 晶体表面原子结构和一篇论文
  16. c语言编写单片机中断,C语言AVR单片机中断程序写法
  17. python二进制转换为16进制
  18. python爬取四川建设行业数据共享平台
  19. 臭氧味道虽“臭”,架不住它功能强大
  20. 自动驾驶论文:FisheyeMODNet: Moving Object detection on Surround-view Cameras for Autonomous Driving (2019)

热门文章

  1. 第三十六期:学 Java 网络爬虫,需要哪些基础知识?
  2. 用matlab画大数据曲线_基于MATLAB的大数据分析
  3. Codeforces Round #530 Div. 1 自闭记
  4. Android内容提供器——运行权限
  5. pip安装报错处理+PyPi源切换教程
  6. C++ 判断系统大小字节序
  7. MongoDB系列四(索引).
  8. laravel 队列学习
  9. Django Python MySQL Linux 开发环境搭建
  10. 程序编译时书写Makefile注意事项一例