Java 中的 Zip 文件
一个 zip 文件可以由一个文件、多个文件甚至一个文件夹组成。 有多种创建 zip 文件的方法。
本篇文章介绍了使用 Java 创建 zip 文件的不同示例。
使用 Java.Util.Zip 在 Java 中压缩单个文件
我们可以使用 java.util.zip.ZipOutputStream 类在 Java 中压缩单个文件。 请参见下面的示例:
package jiyik;
import java.io.*;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.Files;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Create_Zip {
public static void main(String[] args) {
Path Source_File = Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\jiyik1.txt");
String Output_Zip = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";
try {
Create_Zip.Create_Zip_File(Source_File, Output_Zip);
System.out.println("Zip File Created");
} catch (IOException e) {
e.printStackTrace();
}
}
// method to zip a single file
public static void Create_Zip_File(Path Source_File, String Output_Zip)
throws IOException {
if (!Files.isRegularFile(Source_File)) {
System.err.println("File Not Found.");
return;
}
try (
ZipOutputStream Zip_Output_Stream = new ZipOutputStream(
new FileOutputStream(Output_Zip));
FileInputStream File_Input_Stream = new FileInputStream(Source_File.toFile());
) {
ZipEntry Zip_Entry = new ZipEntry(Source_File.getFileName().toString());
Zip_Output_Stream.putNextEntry(Zip_Entry);
byte[] Buffer = new byte[1024];
int Length;
while ((Length = File_Input_Stream.read(Buffer)) > 0) {
Zip_Output_Stream.write(Buffer, 0, Length);
}
Zip_Output_Stream.closeEntry();
}
}
}
上面的代码将创建一个仅包含单个文件 jiyik1 的 zip 文件。
输出:
Zip File Created
使用 Java.Util.Zip 在 Java 中压缩多个文件
同样,我们可以使用 java.util.zip.ZipOutputStream
将多个文件添加到一个 zip 文件中。 多个文件被一个一个地添加到 zip 文件中。
请参阅以下示例:
package jiyik;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Create_Zip {
public static void main(String[] args) {
try {
//The Source file paths
String Source_File1 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\jiyik1.txt";
String Source_File2 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\\\jiyik2.txt";
//Output Zipped file path
String Output_Zip_Path = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\NewZip.zip";
File Output_Zip = new File(Output_Zip_Path);
FileOutputStream File_Output_Stream = new FileOutputStream( Output_Zip);
ZipOutputStream Zip_Output_Stream = new ZipOutputStream(File_Output_Stream);
Create_Zip_File(Source_File1, Zip_Output_Stream);
Create_Zip_File(Source_File2, Zip_Output_Stream);
Zip_Output_Stream.close();
System.out.println("Zip File Created");
}
catch (IOException e) {
e.printStackTrace();
}
}
// Method to create the zip file
private static void Create_Zip_File(String Source_File, ZipOutputStream Zip_Output_Stream) throws IOException {
final int BUFFER = 1024;
BufferedInputStream Buffered_Input_Stream = null;
try {
File file = new File(Source_File);
FileInputStream File_Input_Stream = new FileInputStream(file);
Buffered_Input_Stream = new BufferedInputStream(File_Input_Stream, BUFFER);
ZipEntry Zip_Entry = new ZipEntry(file.getName());
Zip_Output_Stream.putNextEntry(Zip_Entry);
byte Data[] = new byte[BUFFER];
int Length;
while((Length = Buffered_Input_Stream.read(Data, 0, BUFFER)) != -1) {
Zip_Output_Stream.write(Data, 0, Length);
}
// close the entry
Zip_Output_Stream.closeEntry();
}
finally {
try {
Buffered_Input_Stream.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
}
上面的代码会将多个文件添加到一个 zip 文件中。
输出:
Zip File Created
使用 Java.Util.Zip 在 Java 中压缩文件夹
Java.Util.Zip 还可以压缩文件夹或目录,包括所有子文件夹和文件。 请参见下面的示例:
package jiyik;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class Create_Zip {
public static void main(String[] args) {
Path Source_Folder = Paths.get("C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\Folder");
if (!Files.isDirectory(Source_Folder)) {
System.out.println("Please provide the right folder.");
return;
}
try {
Create_Zip.Create_Zip_Folder(Source_Folder);
System.out.println("Folder is zipped");
} catch (IOException e) {
e.printStackTrace();
}
}
// zip a directory or folder
public static void Create_Zip_Folder(Path Source_Folder) throws IOException {
// get folder name as zip file name
String Output_Zip = Source_Folder.getFileName().toString() + ".zip";
try (
ZipOutputStream Zip_Output_Stream = new ZipOutputStream(
new FileOutputStream(Output_Zip))
) {
Files.walkFileTree(Source_Folder, new SimpleFileVisitor<>() {
@Override
public FileVisitResult visitFile(Path File,
BasicFileAttributes File_Attributes) {
// only copy files
if (File_Attributes.isSymbolicLink()) {
return FileVisitResult.CONTINUE;
}
try (FileInputStream File_Input_Stream = new FileInputStream(File.toFile())) {
Path targetFile = Source_Folder.relativize(File);
Zip_Output_Stream.putNextEntry(new ZipEntry(targetFile.toString()));
byte[] BUFFER = new byte[1024];
int Length;
while ((Length = File_Input_Stream.read(BUFFER)) > 0) {
Zip_Output_Stream.write(BUFFER, 0, Length);
}
Zip_Output_Stream.closeEntry();
System.out.printf("Zipped file : %s%n", File);
} catch (IOException e) {
e.printStackTrace();
}
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path File, IOException exception) {
System.err.printf("Unable to zip the file : %s%n%s%n", File, exception);
return FileVisitResult.CONTINUE;
}
});
}
}
}
上面的代码将压缩给定的文件夹。
输出:
Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\jiyik1.txt
Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\jiyik2.txt
Folder is zipped
还有其他方法,如文件系统或 zip4j 可以压缩文件或文件夹。 但是,Java.Util.Zip 被认为是压缩文件和文件夹的最有效方式。
相关文章
使用 Java 删除目录中的文件
发布时间:2023/05/15 浏览次数:190 分类:Java
-
在本文中,我们将学习如何在不删除文件夹本身的情况下删除文件夹中的文件。有多种方法可以做到这一点。 在 Java 中使用文件类的 delete() 删除目录中的文件
在 Java 中从文件中读取字节
发布时间:2023/05/15 浏览次数:182 分类:Java
-
Java 中有几种方法可以从文件中读取字节或将文件转换为字节或字节数组。 本教程演示了用 Java 从文件中读取字节的不同方法。
Kotlin 中 Java String[] 的等价物
发布时间:2023/05/13 浏览次数:59 分类:Java
-
本文介绍了 Kotlin 中 Java String[] 的等价物。 我们将看到所有可能的方法来为 Kotlin 实现与 Java 中的 String[] 相同的结果。
将 Java 文件代码转换为 Kotlin
发布时间:2023/05/13 浏览次数:143 分类:Java
-
Kotlin 现在是一种官方的 Android 语言。 因此,您可能希望将 Java 文件更改为 Kotlin。 本文教您如何将 Java 转换为 Kotlin。
在 Kotlin 中使用 forEach
发布时间:2023/05/13 浏览次数:122 分类:Java
-
本文介绍 Kotlin 中 forEach 关键字的概念和使用。 我们将看到一些使用 Kotlin forEach 循环的示例来理解它。
在 Kotlin 中使用 reified 关键字
发布时间:2023/05/13 浏览次数:197 分类:Java
-
reified 关键字是在 Kotlin 中使用泛型时最常使用的编程概念。在本教程中,我们将学习如何使用两种方法解决此问题,包括将类型的类作为泛型函数的参数传递,以及将 reified 关键字与内联函数
Kotlin 中 ! 和 ? 运算符之间的区别
发布时间:2023/05/13 浏览次数:180 分类:Java
-
在 Kotlin 中,断言运算符 !! 和安全调用符 ? 使用 Null 安全。本文介绍空安全的概念。 我们也将通过如何! 和 ? 在 Kotlin 中有助于空安全。
Kotlin 中 is 运算符 与 as 运算符之间的区别
发布时间:2023/05/13 浏览次数:149 分类:Java
-
这篇文章讨论了 Kotlin 中 is 和 as 运算符之间的区别。 我们还将介绍如何以及何时使用每一个。
Android Studio 中的 Kotlin 打印到控制台
发布时间:2023/05/13 浏览次数:55 分类:Java
-
Kotlin 的 logcat 窗口可以实时显示输出,让开发人员能够高效地处理他们的代码。 今天,我们将完成将消息打印到 Kotlin 控制台的步骤。