假设我具有以下目录结构。
D:\reports\january\
一月份内部有两个excel文件,分别是A.xls和B.xls。在很多地方,都有关于如何使用zip文件进行压缩的文章java.util.zip。但是,我要压缩的文件夹一月自身内部报告文件夹,这样既 月份 和 january.zip 将出席内部报告。( 这意味着当我解压缩january.zip文件时,我应该得到january文件夹 )。
java.util.zip
谁能给我提供使用进行此操作的代码java.util.zip。请让我知道通过使用其他库是否可以更轻松地完成此操作。
非常感谢…
可以通过软件包轻松解决, java.util.Zip 不需要任何其他Jar文件
java.util.Zip
Jar
只需复制以下代码,并run it与IDE
run it
IDE
//Import all needed packages package general; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipUtils { private List <String> fileList; private static final String OUTPUT_ZIP_FILE = "Folder.zip"; private static final String SOURCE_FOLDER = "D:\\Reports"; // SourceFolder path public ZipUtils() { fileList = new ArrayList < String > (); } public static void main(String[] args) { ZipUtils appZip = new ZipUtils(); appZip.generateFileList(new File(SOURCE_FOLDER)); appZip.zipIt(OUTPUT_ZIP_FILE); } public void zipIt(String zipFile) { byte[] buffer = new byte[1024]; String source = new File(SOURCE_FOLDER).getName(); FileOutputStream fos = null; ZipOutputStream zos = null; try { fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(fos); System.out.println("Output to Zip : " + zipFile); FileInputStream in = null; for (String file: this.fileList) { System.out.println("File Added : " + file); ZipEntry ze = new ZipEntry(source + File.separator + file); zos.putNextEntry(ze); try { in = new FileInputStream(SOURCE_FOLDER + File.separator + file); int len; while ((len = in .read(buffer)) > 0) { zos.write(buffer, 0, len); } } finally { in.close(); } } zos.closeEntry(); System.out.println("Folder successfully compressed"); } catch (IOException ex) { ex.printStackTrace(); } finally { try { zos.close(); } catch (IOException e) { e.printStackTrace(); } } } public void generateFileList(File node) { // add file only if (node.isFile()) { fileList.add(generateZipEntry(node.toString())); } if (node.isDirectory()) { String[] subNote = node.list(); for (String filename: subNote) { generateFileList(new File(node, filename)); } } } private String generateZipEntry(String file) { return file.substring(SOURCE_FOLDER.length() + 1, file.length()); } }
请参考mkyong ..我更改了当前问题要求的代码