Apache common提供了很多實用的工具包,下面就說一下如何用compress包來壓縮文件夾。先引入compress,io和lang3這3個工具包:
<dependencies>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-compress</artifactId>
<version>1.9</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.8</version>
</dependency>
</dependencies>
這個方法實現(xiàn)了將文件夾下所有的文件壓縮成zip包,并輸出到文件流中,可以直接寫入到文件或提供給前端下載,工具類如下:文章來源:http://www.zghlxwxcb.cn/news/detail-809349.html
import org.apache.commons.compress.archivers.ArchiveException;
import org.apache.commons.compress.archivers.ArchiveStreamFactory;
import org.apache.commons.compress.archivers.zip.Zip64Mode;
import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.TrueFileFilter;
import org.apache.commons.lang3.StringUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Collection;
public class ZipUtils {
/**
* 壓縮文件夾下的所有文件
* @param dir 要壓縮的文件夾
* @param outputStream 輸出壓縮后的文件流
* @throws IOException IO異常
* @throws ArchiveException 壓縮異常
*/
public static void zip(File dir, OutputStream outputStream) throws IOException, ArchiveException {
ZipArchiveOutputStream zipOutput = null;
try {
zipOutput = (ZipArchiveOutputStream) new ArchiveStreamFactory()
.createArchiveOutputStream(ArchiveStreamFactory.ZIP, outputStream);
zipOutput.setEncoding("utf-8");
zipOutput.setUseZip64(Zip64Mode.AsNeeded);
Collection<File> files = FileUtils.listFilesAndDirs(dir, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (File file : files) {
InputStream in = null;
try {
if (file.getPath().equals(dir.getPath())) {
continue;
}
String relativePath = StringUtils.replace(file.getPath(), dir.getPath() + File.separator, "");
ZipArchiveEntry entry = new ZipArchiveEntry(file, relativePath);
zipOutput.putArchiveEntry(entry);
if (file.isDirectory()) {
zipOutput.closeArchiveEntry();
continue;
}
in = new FileInputStream(file);
IOUtils.copy(in, zipOutput);
zipOutput.closeArchiveEntry();
} finally {
if (in != null) {
IOUtils.closeQuietly(in);
}
}
}
zipOutput.finish();
} finally {
IOUtils.closeQuietly(zipOutput);
}
}
public static void main(String args[]) throws IOException, ArchiveException {
//要壓縮的文件路徑
File dir = new File("C:\\data\\data");
//壓縮后zip包文件路徑
File dest = new File("C:\\data\\test.zip");
OutputStream outputStream = new FileOutputStream(dest);
zip(dir, outputStream);
}
}
執(zhí)行main函數(shù)跑測試用例,發(fā)現(xiàn)程序?qū)ir路徑下的所有文件已經(jīng)壓縮并輸出zip包。文章來源地址http://www.zghlxwxcb.cn/news/detail-809349.html
到了這里,關于Java利用Apache compress包實現(xiàn)文件夾壓縮成Zip包的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!