下面我将为您讲解Java压缩文件夹最实用简单的方法的完整攻略。
什么是Java压缩文件夹?
Java中的压缩文件夹指的是将多个文件和文件夹压缩成一个文件,以减小文件的大小,并且方便传输和存储。Java中提供了许多压缩文件夹的处理工具类,其中最常用的是java.util.zip.ZipOutputStream类和java.util.zip.ZipInputStream类。
压缩文件夹
下面我们来介绍Java中压缩文件夹的实现方法。假如我们要压缩一个名为folder的文件夹,可以通过下面的代码来实现:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void main(String[] args) {
String folderPath = "/path/to/folder";
String zipPath = "/path/to/compressed/folder.zip";
File folder = new File(folderPath);
File zipFile = new File(zipPath);
compressFolder(folder, zipFile);
}
private static void compressFolder(File folder, File zipFile) {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
compress(folder, zos, "");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void compress(File source, ZipOutputStream zos, String baseDir) throws IOException {
if (source.isDirectory()) {
File[] files = source.listFiles();
if (files.length == 0) {
ZipEntry entry = new ZipEntry(baseDir + source.getName() + "/");
zos.putNextEntry(entry);
zos.closeEntry();
} else {
for (File file : files) {
compress(file, zos, baseDir + source.getName() + "/");
}
}
} else {
ZipEntry entry = new ZipEntry(baseDir + source.getName());
zos.putNextEntry(entry);
try (FileInputStream fis = new FileInputStream(source)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
} finally {
zos.closeEntry();
}
}
}
}
上面的代码中,我们首先指定要压缩的文件夹路径和压缩后的zip文件路径,然后通过File对象创建对应的文件和文件夹对象。接着通过ZipOutputStream和FileOutputStream实例化一个输出流对象,并调用compressFolder方法进行文件夹压缩。
compressFolder方法调用了compress方法来进行递归压缩。在compress方法中,我们首先判断source是否是文件夹,如果是文件夹则获取该文件夹中所有的文件和文件夹,并递归调用compress方法进行压缩。如果是文件,则创建ZipEntry对象并写入压缩流中。
解压缩文件夹
下面我们来介绍Java中解压缩文件夹的实现方法。假如我们要解压缩一个名为folder.zip的zip文件,可以通过下面的代码来实现:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipUtil {
public static void main(String[] args) {
String zipPath = "/path/to/folder.zip";
String folderPath = "/path/to/uncompressed/folder";
File zipFile = new File(zipPath);
File folder = new File(folderPath);
unzip(zipFile, folder);
}
private static void unzip(File zipFile, File folder) {
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry entry;
byte[] buffer = new byte[1024];
while ((entry = zis.getNextEntry()) != null) {
File file = new File(folder, entry.getName());
if (entry.isDirectory()) {
if (!file.exists()) {
file.mkdirs();
}
} else {
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
try (FileOutputStream fos = new FileOutputStream(file)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
上面的代码中,我们首先指定要解压缩的zip文件路径和解压缩后的文件夹路径,然后通过File对象创建对应的文件和文件夹对象。接着通过ZipInputStream和FileInputStream实例化一个输入流对象,并调用unzip方法进行解压缩。
在unzip方法中,我们首先通过ZipInputStream读取zip文件中的Entry,判断是否是文件夹,如果是则创建一个对应的文件夹,如果是文件则进行输出。同时也需要注意,如果上级目录不存在,我们需要先创建上级目录。
示例
压缩文件夹
下面是一个将/Users/username/test文件夹压缩成/Users/username/test.zip文件的代码示例:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ZipUtil {
public static void main(String[] args) {
String folderPath = "/Users/username/test";
String zipPath = "/Users/username/test.zip";
File folder = new File(folderPath);
File zipFile = new File(zipPath);
compressFolder(folder, zipFile);
}
private static void compressFolder(File folder, File zipFile) {
try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))) {
compress(folder, zos, "");
} catch (IOException e) {
e.printStackTrace();
}
}
private static void compress(File source, ZipOutputStream zos, String baseDir) throws IOException {
if (source.isDirectory()) {
File[] files = source.listFiles();
if (files.length == 0) {
ZipEntry entry = new ZipEntry(baseDir + source.getName() + "/");
zos.putNextEntry(entry);
zos.closeEntry();
} else {
for (File file : files) {
compress(file, zos, baseDir + source.getName() + "/");
}
}
} else {
ZipEntry entry = new ZipEntry(baseDir + source.getName());
zos.putNextEntry(entry);
try (FileInputStream fis = new FileInputStream(source)) {
byte[] buffer = new byte[1024];
int len;
while ((len = fis.read(buffer)) > 0) {
zos.write(buffer, 0, len);
}
} finally {
zos.closeEntry();
}
}
}
}
解压缩文件夹
下面是一个将/Users/username/test.zip文件解压缩到/Users/username/unzip_test文件夹的代码示例:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class UnzipUtil {
public static void main(String[] args) {
String zipPath = "/Users/username/test.zip";
String folderPath = "/Users/username/unzip_test";
File zipFile = new File(zipPath);
File folder = new File(folderPath);
unzip(zipFile, folder);
}
private static void unzip(File zipFile, File folder) {
try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
ZipEntry entry;
byte[] buffer = new byte[1024];
while ((entry = zis.getNextEntry()) != null) {
File file = new File(folder, entry.getName());
if (entry.isDirectory()) {
if (!file.exists()) {
file.mkdirs();
}
} else {
File parent = file.getParentFile();
if (!parent.exists()) {
parent.mkdirs();
}
try (FileOutputStream fos = new FileOutputStream(file)) {
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
希望我的回答能够帮助到您。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java压缩文件夹最实用简单的方法 - Python技术站