java進行檔案的壓縮(WAR)
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Iterator;
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveInputStream;
import org.apache.commons.compress.archivers.ArchiveOutputStream;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.jar.JarArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.io.FileUtils;
public class WarZip {
/* public static void unzip(String warPath, String unzipPath) {
File warFile = new File(warPath);
try {
BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(warFile));
ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream(ArchiveStreamFactory.JAR,
bufferedInputStream);
JarArchiveEntry entry = null;
while ((entry = (JarArchiveEntry) in.getNextEntry()) != null) {
if (entry.isDirectory()) {
new File(unzipPath, entry.getName()).mkdir();
} else {
OutputStream out = FileUtils.openOutputStream(new File(unzipPath, entry.getName()));
IOUtils.copy(in, out);
out.close();
}
}
in.close();
} catch (FileNotFoundException e) {
System.err.println("未找到war檔案");
} catch (ArchiveException e) {
System.err.println("不支援的壓縮格式");
} catch (IOException e) {
System.err.println("檔案寫入發生錯誤");
}
} */
public static void zip(String zipDir,String contextPath) {
File outFile = new File("D:\\"+contextPath+".war");
try {
outFile.createNewFile();
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(outFile));
ArchiveOutputStream out = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.JAR,bufferedOutputStream);
if (zipDir.charAt(zipDir.length() - 1) != '/') {
zipDir += '/';
}
Iterator files = FileUtils.iterateFiles(new File(zipDir), null, true);
while (files.hasNext()) {
File file = (File) files.next();
String path = file.getPath();
String[] split = path.split(contextPath);
ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file, path.substring(path.length()-split[2].length(), path.length()));
out.putArchiveEntry(zipArchiveEntry);
IOUtils.copy(new FileInputStream(file), out);
out.closeArchiveEntry();
}
out.finish();
out.close();
} catch (IOException e) {
System.out.println(e.getMessage());
System.err.println("建立檔案失敗");
} catch (ArchiveException e) {
System.err.println("不支援的壓縮格式");
}
}
}
網上找的稍微改了一下,路徑的話是放在了當前專案下的/resource/file下的資料夾,打包的時候從專案名稱下的一級開始打包,如不需要可以去掉split那一段附近的程式碼替換自己需要的路徑