直接複製過來用就行
public class EEETest {
public static void main(String[] args) throws FileNotFoundException {
String basePath = "";
String directoryName = "D:/DLL/d067f03f-840a-4462-9d67-045ff3960806/40";
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream("E://test.zip"));
zipDir(directoryName,zos,basePath);
}
public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) {
/**
* 該方法遞歸實現將多個文件夾壓縮在同一個zip包中 然後刪除文件夾directoryName 下需要被壓縮的文件。
* @param directoryName 文件夾路徑
* @param zos 壓縮流 ZipOutputStream 確定壓縮包生成的位置
* @param basePath 用於傳給 ZipEntry 用於壓縮包分文件夾第一級傳入可以爲""
* @throws IOException
*/
File file = new File(directoryName);
// 每一級別的遞歸 basePath 不應該被改變所以添加一個 參數 copyBasePath
String copyBasePath ="";
if (file.exists()) {
File[] fileList = file.listFiles();
for (File f : fileList) {
if (f.isDirectory()) {
// 拼接文件夾目錄
if (!"".equals(basePath)) {
copyBasePath = basePath+ File.separator+f.getName();
} else {
copyBasePath = f.getName();
}
// 繼續遞歸文件夾
zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath);
} else {
// 壓縮單個文件到 zos
String zipName;
if (!"".equals(basePath)) {
zipName = basePath + File.separator + f.getName();
} else {
zipName = f.getName();
}
try {
// zos.putNextEntry 開始添加壓縮文件 ZipEntry傳入的參數 zipName如果包含了層級關係就會生成文件夾
zos.putNextEntry(new ZipEntry(zipName));
int len;
FileInputStream is = new FileInputStream(f);
byte[] bytes = new byte[1024];
while ((len = is.read(bytes)) != -1) {
zos.write(bytes, 0, len);
}
zos.flush();
// zos.closeEntry() 結束當前壓縮文件的添加
zos.closeEntry();
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
try {
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}