71 lines
2.7 KiB
Java
71 lines
2.7 KiB
Java
package zone.themcgamer.common;
|
|
|
|
import java.io.*;
|
|
import java.nio.file.Files;
|
|
import java.nio.file.Path;
|
|
import java.nio.file.Paths;
|
|
import java.util.stream.Collectors;
|
|
import java.util.zip.ZipEntry;
|
|
import java.util.zip.ZipInputStream;
|
|
import java.util.zip.ZipOutputStream;
|
|
|
|
/**
|
|
* @author Braydon
|
|
*/
|
|
public class ZipUtils {
|
|
/**
|
|
* Zip the given directory
|
|
*
|
|
* @param sourceDirectoryPath the path of the directory to zip
|
|
* @param zipDirectoryPath the path of the output file
|
|
*/
|
|
public static void zip(String sourceDirectoryPath, String zipDirectoryPath) {
|
|
try {
|
|
Path zipPath = Files.createFile(Paths.get(zipDirectoryPath));
|
|
try (ZipOutputStream zipOutputStream = new ZipOutputStream(Files.newOutputStream(zipPath))) {
|
|
Path sourcePath = Paths.get(sourceDirectoryPath);
|
|
for (Path path : Files.walk(sourcePath).filter(path -> !Files.isDirectory(path)).collect(Collectors.toList())) {
|
|
ZipEntry zipEntry = new ZipEntry(sourcePath.relativize(path).toString());
|
|
zipOutputStream.putNextEntry(zipEntry);
|
|
Files.copy(path, zipOutputStream);
|
|
zipOutputStream.closeEntry();
|
|
}
|
|
}
|
|
} catch (IOException ex) {
|
|
ex.printStackTrace();
|
|
}
|
|
}
|
|
|
|
public static void unzip(File source, File output) throws IOException {
|
|
long started = System.currentTimeMillis();
|
|
|
|
FileInputStream fileInputStream = new FileInputStream(source);
|
|
ZipInputStream zipInputStream = new ZipInputStream(fileInputStream);
|
|
ZipEntry entry = zipInputStream.getNextEntry();
|
|
while (entry != null) {
|
|
File file = new File(output, entry.getName());
|
|
if (entry.isDirectory())
|
|
file.mkdirs();
|
|
else {
|
|
File parent = file.getParentFile();
|
|
if (!parent.exists())
|
|
parent.mkdirs();
|
|
FileOutputStream fileOutputStream = new FileOutputStream(file);
|
|
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
|
|
byte[] buffer = new byte[1024];
|
|
int location;
|
|
while ((location = zipInputStream.read(buffer)) != -1)
|
|
bufferedOutputStream.write(buffer, 0, location);
|
|
bufferedOutputStream.close();
|
|
fileOutputStream.close();
|
|
}
|
|
entry = zipInputStream.getNextEntry();
|
|
}
|
|
fileInputStream.close();
|
|
|
|
zipInputStream.closeEntry();
|
|
zipInputStream.close();
|
|
|
|
System.out.println("Finished unzip process for \"" + source.getPath() + "\" in " + (System.currentTimeMillis() - started) + "ms");
|
|
}
|
|
} |