```java
/**
* 壓縮指定的檔案或資料夾
* @param zos ZipOutputStream
* @param file 欲壓縮的檔案或資料夾
* @param baseName 壓縮時的根目錄
* @throws IOException 壓縮失敗時拋出例外
*/
private static void zipFile(ZipOutputStream zos, File file, String baseName) throws IOException {
if (file.isDirectory()) { // 如果是資料夾
// 新增資料夾 ZipEntry
String entryName = baseName + file.getName() + "/";
zos.putNextEntry(new ZipEntry(entryName));
// 遞迴處理資料夾內的所有檔案及子資料夾
File[] files = file.listFiles();
if (files != null) {
for (File subFile : files) {
zipFile(zos, subFile, entryName);
}
}
} else {
// 如果是檔案
// 新增檔案 ZipEntry
String entryName = baseName + file.getName();
zos.putNextEntry(new ZipEntry(entryName));
// 將檔案內容寫入 ZipOutputStream
FileInputStream fis = new FileInputStream(file);
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
fis.close();
// 關閉 ZipEntry
zos.closeEntry();
}
}
```