从zip中读取文件 合并到指定的文件中
从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中读取文件 合并到指定的文件中相关推荐
- 用python将指定目录下的所有json文件合并成一个csv文件
#!/usr/bin/env python # -*- encoding: utf-8 -*-import sys import json import os import pandas as pd ...
- 把一个文件夹下的所有csv文件合并到一个csv文件中,并添加文件名作为列名
DEAM数据集的标签如图所示,共有1802个csv文件,每首音乐的特征单独存储在一个csv文件中: 现在想要将这些csv文件合并到一个csv文件中,同时用文件名作为列名.用python代码实现如下: ...
- 多个pdf文件合并为一个pdf文件
简单代码搞定将多个pdf文件合并为同一个pdf文件,有python你还有啥担心的呢?在日常生活中需要用到的将多个pdf文件合并为同一个pdf文件的请看过来,不要再去网上下载这啊那的转换软件了.话不多说 ...
- PDF合并:如何将两个PDF文件合并成一个PDF文件
PDF文件是我们在工作中经常能够用到的文件,尤其是在办公中会遇到很多PDF文件在传输的过程中为了传输更快被拆分成了几个PDF文件,但是要找一个完整的PDF文件就需要把两个被拆分的PDF文件合并成一个P ...
- 如何将多个PDF文件合并为一个PDF文件?PDF文件合并教程
如何合并PDF文件?PDF我们都不陌生,很多人经常在网站上搜狐各种类型的PDF资料,但是有时因为资料太多不好管理和查阅,如果可以把同类型的多个PDF文件合并为一个PDF文件,那无论是保存还是查阅,都会 ...
- 怎么将几张pdf合并成一张_如何将多个pdf文件合并成一个pdf文件?
原标题:如何将多个pdf文件合并成一个pdf文件? 我很喜欢使用PDF文件格式,为什么呢?因为PDF具有许多其他电子文档格式无法相比的优点.PDF文件格式可以将文字.字型.格式.颜色及独立于设备和分辨 ...
- 将两个HEX文件合并成一个HEX文件
将两个HEX文件合并成一个HEX文件 文章目录 将两个HEX文件合并成一个HEX文件 系统环境 1. 生成BootLoader和app的HEX文件 2. 将两个HEX文件合并成一个HEX 3. 利用J ...
- 怎么将多个CSV文件合并成一个CSV文件
最近要批量将几百个CSV文件合成一个文件,最开始是一个个复制粘贴的,进度太慢了,后面发现用一个小办法可以几秒钟将几百个CSV文件合并成一个文件,分享给大家. 第一步:将需要合并的csv文件夹全部放在D ...
- 如何在SQL Server 2016中使用R合并和拆分CSV文件
介绍 (Introduction) From time to time, we may encounter the following scenarios when dealing with data ...
最新文章
- 模式窗口window.open造成Session丢失的解决方法
- windows上下载redis扩展
- 警告:push.default未设置;它的隐含值在Git 2.0中发生了变化
- PowerShell-1.入门及其常用
- Linux cpuidle framework(4)_menu governor
- ibd文件如何变为json_如何轻松了解 Python 必学的 django 框架?
- currentTitle的用法
- labview linux 内核 不匹配,Linux CentOS7(或Ubuntu)中安装NI-VISA后一打开范例Simple Serial.vi就闪退,LabVIEW就崩溃。...
- EduSoho网络课堂通用版
- C案例:打印斐波拉契数列
- imutils.path
- 几种数据库快速csv入库方式整理
- 动态将ASPX生成HTML网页并将网页导出PDF
- keepalived(二)vip漂移
- 晶体表面原子结构和一篇论文
- c语言编写单片机中断,C语言AVR单片机中断程序写法
- python二进制转换为16进制
- python爬取四川建设行业数据共享平台
- 臭氧味道虽“臭”,架不住它功能强大
- 自动驾驶论文:FisheyeMODNet: Moving Object detection on Surround-view Cameras for Autonomous Driving (2019)