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/12/17 浏览次数:217 分类:Java
-
本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。
如何在 Java 中把 Hashmap 转换为 JSON 对象
发布时间:2023/12/17 浏览次数:187 分类:Java
-
它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。
如何在 Java 中按值排序 Map
发布时间:2023/12/17 浏览次数:171 分类:Java
-
本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map
进行排序,并列出了一些示例代码来理解它。
如何在 Java 中打印 HashMap
发布时间:2023/12/17 浏览次数:192 分类:Java
-
本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。
在 Java 中更新 Hashmap 的值
发布时间:2023/12/17 浏览次数:146 分类:Java
-
本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。
Java 中的 hashmap 和 map 之间的区别
发布时间:2023/12/17 浏览次数:79 分类:Java
-
本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,
在 Java 中获取用户主目录
发布时间:2023/12/17 浏览次数:218 分类:Java
-
这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。
Java 中 size 和 length 的区别
发布时间:2023/12/17 浏览次数:179 分类:Java
-
这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。
Java 中的互斥锁
发布时间:2023/12/17 浏览次数:111 分类:Java
-
了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,