mirror of
https://github.com/tiennm99/zfoo.git
synced 2026-08-18 06:27:01 +00:00
feat[zip]: zip directory
This commit is contained in:
@@ -12,11 +12,14 @@
|
||||
|
||||
package com.zfoo.net.util.security;
|
||||
|
||||
import com.zfoo.protocol.collection.CollectionUtils;
|
||||
import com.zfoo.protocol.util.FileUtils;
|
||||
import com.zfoo.protocol.util.IOUtils;
|
||||
import com.zfoo.protocol.util.StringUtils;
|
||||
|
||||
import java.io.*;
|
||||
import java.nio.charset.Charset;
|
||||
import java.util.ArrayList;
|
||||
import java.util.zip.*;
|
||||
|
||||
/**
|
||||
@@ -69,6 +72,9 @@ public abstract class ZipUtils {
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* default charset is UTF-8
|
||||
*/
|
||||
public static void zip(String[] sourceFilePaths, String zipFilePath) {
|
||||
FileOutputStream fos = null;
|
||||
ZipOutputStream zipOut = null;
|
||||
@@ -76,15 +82,28 @@ public abstract class ZipUtils {
|
||||
fos = new FileOutputStream(zipFilePath);
|
||||
zipOut = new ZipOutputStream(fos);
|
||||
for (var sourceFilePath : sourceFilePaths) {
|
||||
var fileToZip = new File(sourceFilePath);
|
||||
if (fileToZip.isHidden()) {
|
||||
continue;
|
||||
var file = new File(sourceFilePath);
|
||||
if (file.isDirectory()) {
|
||||
var files = FileUtils.getAllReadableFiles(file);
|
||||
for (var f : files) {
|
||||
if (f.isHidden()) {
|
||||
continue;
|
||||
}
|
||||
var fis = new FileInputStream(f);
|
||||
var subPath = StringUtils.substringAfterFirst(f.getAbsolutePath(), file.getParentFile().getAbsolutePath());
|
||||
subPath = StringUtils.substringAfterFirst(subPath, file.getName());
|
||||
ZipEntry zipEntry = new ZipEntry(file.getName() + subPath);
|
||||
zipOut.putNextEntry(zipEntry);
|
||||
IOUtils.copy(fis, zipOut);
|
||||
IOUtils.closeIO(fis);
|
||||
}
|
||||
} else {
|
||||
var fis = new FileInputStream(file);
|
||||
ZipEntry zipEntry = new ZipEntry(file.getName());
|
||||
zipOut.putNextEntry(zipEntry);
|
||||
IOUtils.copy(fis, zipOut);
|
||||
IOUtils.closeIO(fis);
|
||||
}
|
||||
var fis = new FileInputStream(fileToZip);
|
||||
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
|
||||
zipOut.putNextEntry(zipEntry);
|
||||
IOUtils.copy(fis, zipOut);
|
||||
IOUtils.closeIO(fis);
|
||||
}
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
@@ -94,6 +113,9 @@ public abstract class ZipUtils {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* default charset is UTF-8
|
||||
*/
|
||||
public static void unzip(String zipFilePath, String destDirectory) {
|
||||
try {
|
||||
unzip(FileUtils.openInputStream(new File(zipFilePath)), destDirectory);
|
||||
|
||||
@@ -15,8 +15,6 @@ package com.zfoo.net.util.security;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
/**
|
||||
* @author godotg
|
||||
*/
|
||||
@@ -48,8 +46,8 @@ public class ZipTest {
|
||||
|
||||
@Test
|
||||
public void zipTest() {
|
||||
var sourceFiles = new String[]{"./README.md","./README_CN.md"};
|
||||
ZipUtils.zip(sourceFiles, "./ai-simulator.zip");
|
||||
var sourceFiles = new String[]{"./src","./README.md"};
|
||||
ZipUtils.zip(sourceFiles, "./my-source.zip");
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Reference in New Issue
Block a user