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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2023/12/10 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 从zip中读取文件 合并到指定的文件中 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

從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改造補(bǔ)丁\\medext_mm\\temp\\patch_mmmps_medext_1622031243072.zip";String path = src;//存儲(chǔ)文件目錄路徑//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));// 壓縮文件實(shí)體ZipEntry ze;String zipDirectory = path.substring(0, path.lastIndexOf("."));while ((ze = zin.getNextEntry()) != null) {// 壓縮文件的絕對(duì)路徑//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("/"));//創(chuàng)建文件夾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 文件數(shù)組值// 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;}/*** 關(guān)閉給定的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()) {// 遞歸調(diào)用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*/// 堆棧方式實(shí)現(xiàn)public static void loopDeleteFields(File fileName) {Stack<File> stack = new Stack<>();// 存儲(chǔ)文件夾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);//存儲(chǔ)文件夾 先進(jìn)后出 FILOstackDir.add(f);} else {f.delete();}}}}// 刪除文件夾while (!stackDir.isEmpty()){File file = stackDir.pop();file.delete();}// System.out.println("刪除--");}

參考的博客 1 .

參考的博客 2

總結(jié)

以上是生活随笔為你收集整理的从zip中读取文件 合并到指定的文件中的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。