Java 中的檔案壓縮和解壓縮
讀取特定檔案的資料並壓縮一些檔案到zip壓縮包中,是 Java 中封裝的過程。Java 環境中提供了兩個壓縮和解壓縮類,它們提供資料deflate壓縮格式。它們是:
DeflaterOutputStream 類 - 用於將檔案壓縮成deflate格式,例如 GZIPOutputStream。
InflaterInputStream 類 - 用於以deflate格式解壓縮檔案,例如 GZIPInputStream。
示例
這是一個關於如何在 Java 中將檔案壓縮成 Zip 檔案的示例:
try {
File file = new File(filePath);
String zipFileName = file.getName().concat(".zip");
FileOutputStream fos = new FileOutputStream(zipFileName);
ZipOutputStream zos = new ZipOutputStream(fos);
zos.putNextEntry(new ZipEntry(file.getName()));
byte[] bytes = Files.readAllBytes(Paths.get(filePath));
zos.write(bytes, 0, bytes.length);
zos.closeEntry();
zos.close();
} catch (FileNotFoundException ex) {
System.err.format("The file %s does not exist", filePath);
} catch (IOException ex) {
System.err.println("I/O error: " + ex);
}
在 Java 中執行檔案壓縮和解壓縮的演算法
在這個可能的演算法中,我們將向您展示如何使用 Java 環境執行壓縮和解壓縮過程以獲得所需結果。
步驟 1 - 開始該過程。
步驟 2 - 宣告並匯入 Java 包以執行壓縮和解壓縮過程。
步驟 3 - 宣告一個公共類。
步驟 4 - 宣告一個字串引數。
步驟 5 - 分配原始檔案,這可能會丟擲異常。
步驟 6 - 宣告一個 FileInputStream 以執行讀取資料操作。
步驟 7 - 分配第二個壓縮檔案。
步驟 8 - 宣告一個 FileOutputStream 以執行讀取資料操作。
步驟 9 - 從 FileInputStream 讀取資料。
步驟 10 - 將資料寫入 DeflaterOutputStream。
步驟 11 - 獲取壓縮和解壓縮檔案作為輸出。
步驟 12 - 關閉檔案。
步驟 13 - 獲取返回值。
步驟 14 - 終止該過程。
Java 中檔案壓縮和解壓縮的語法
public class CompressingFiles {
public static void main(String args[]) throws IOException {
String inputPath = "Declare The File Path Input";
FileInputStream inputStream = new FileInputStream(inputPath);
String outputPath = "Declare The File Path Output";
FileOutputStream outputStream = new FileOutputStream(outputPath);
DeflaterOutputStream compresser = new DeflaterOutputStream(outputStream);
int contents;
while ((contents=inputStream.read())!=-1){
compresser.write(contents);
}
compresser.close();
System.out.println("File compressed Today.....");
}
public class DeCompressingFiles {
public static void main(String args[]) throws IOException {
StringinputPath ="Declare The File Path Input";
FileInputStream inputStream = new FileInputStream(inputPath);
String outputpath = "Declare The File Path Output";
FileOutputStream outputStream = new FileOutputStream(outputpath);
InflaterInputStream decompresser = new InflaterInputStream(inputStream);
int contents;
while ((contents=decompresser.read())!=-1){
outputStream.write(contents);
}
outputStream.close();
decompresser.close();
System.out.println("File un-compressed today");
}
}
在上述可能的語法中,我們嘗試向您展示如何宣告和建立壓縮和解壓縮類,並最終獲得 zip 檔案。透過使用這些特定的語法,我們正在朝著可能的 Java 方法前進,以有效地解決問題陳述。
遵循的方法
方法 1 - 使用 DeflaterOutputStream 壓縮檔案並使用 InflaterInputStream 解壓縮檔案的 Java 程式
方法 2 - Java 程式在單個檔案和多個檔案上執行壓縮和解壓縮操作
方法 1:使用 DeflaterOutputStream 壓縮檔案並使用 InflaterInputStream 解壓縮檔案
使用 DeflaterOutputStream 方法壓縮檔案
在這種可能的方法中,我們將應用 DeflaterOutputStream,它能夠將檔案壓縮成 deflate 格式。
DeflaterOutputStream dos=new DeflaterOutputStream(fos); InflaterInputStream iis=new InflaterInputStream(fis)
示例
//Java program to crompress some files by using java.util.zip.DeflaterOutputStream
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.Deflater;
import java.util.zip.DeflaterOutputStream;
public class zipoperation{
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("File 1 ARBRDD");
FileOutputStream fos=new FileOutputStream("File 2 ARBRDD");
DeflaterOutputStream dos=new DeflaterOutputStream(fos);
int data;
while ((data=fis.read())!=-1){
dos.write(data);
}
fis.close();
dos.close();
}
}
Exception in thread "main" java.io.FileNotFoundException: File 1 ARBRDD (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112) at zipoperation.main(zipoperation.java:10)
使用 InflaterInputStream 方法解壓縮檔案
在這種可能的方法中,我們將應用 InflaterInputStream,它能夠將檔案解壓縮成 deflate 格式。
示例
//Java program to crompress some files by using java.util.zip.InflaterInputStream
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.InflaterInputStream;
public class unzipARBRDD{
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("File 2 ARBRDD");
FileOutputStream fos=new FileOutputStream("File 3 ARBRDD");
InflaterInputStream iis=new InflaterInputStream(fis);
int data;
while((data=iis.read())!=-1){
fos.write(data);
}
fos.close();
iis.close();
}
}
輸出
Exception in thread "main" java.io.FileNotFoundException: File 2 ARBRDD (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112) at unzipARBRDD.main(unzipARBRDD.java:9)
免責宣告 - 在上面提到的每個 Java 程式碼中,使用者在執行此程式碼時都會遇到異常。提到的異常僅針對檔案路徑,這是每個使用者及其系統的唯一語句。
方法 2:在單個檔案和多個檔案上執行壓縮和解壓縮操作
使用各種流方法
在這種可能的方法中,我們將應用 Java 環境中存在的輸入輸出流,應用於多個檔案以及目錄檔案。執行這些 Java 方法後,我們將以 Zip 檔案的形式獲得所需的輸出。
FileInputStream fin=new FileInputStream("File Name.java");
FileOutputStream fout=new FileOutputStream("Compressed File.txt");
示例 1
//Java Program to compress a single file with input output stream
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 ZippingAFileExample {
public static void main(String[] args) throws IOException {
String sourceFile = "src-file.txt";
FileOutputStream fos = new FileOutputStream("compressed.zip");
System.out.println("File compression started.");
ZipOutputStream zipOut = new ZipOutputStream(fos);
File fileToZip = new File(sourceFile);
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
zipOut.close();
fis.close();
fos.close();
System.out.println("Done");
}
}
輸出
File compression started. Exception in thread "main" java.io.FileNotFoundException: src-file.txt (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at ZippingAFileExample.main(ZippingAFileExample.java:15)
示例 2
//Java Program to compress a multiple files at a time in Single Program
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
public class ARBRDD{
public static void main(String[] args) throws IOException {
List<String> srcFiles = Arrays.asList("file-1.txt", "file-2.txt", "file- 3.txt");
FileOutputStream fos = new FileOutputStream("multifilesCompressed.zip");
System.out.println("Zipping started.");
ZipOutputStream zipOut = new ZipOutputStream(fos);
for (String srcFile : srcFiles) {
File fileToZip = new File(srcFile);
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileToZip.getName());
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
}
zipOut.close();
fos.close();
System.out.println("Done");
}
}
輸出
Zipping started. Exception in thread "main" java.io.FileNotFoundException: file-1.txt (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at ARBRDD.main(ARBRDD.java:18)
示例 3
//Java Program to compress a directory at a time
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 ARBRDD {
public static void main(String[] args) throws IOException {
String sourceFile = "src";
FileOutputStream fos = new FileOutputStream("DirSrcCompressed.zip");
ZipOutputStream zipOut = new ZipOutputStream(fos);
File fileToZip = new File(sourceFile);
zipFile(fileToZip, fileToZip.getName(), zipOut);
zipOut.close();
fos.close();
}
private static void zipFile(File fileToZip, String fileName, ZipOutputStream
zipOut) throws IOException {
if (fileToZip.isHidden()) {
return;
}
if (fileToZip.isDirectory()) {
if (fileName.endsWith("/")) {
zipOut.putNextEntry(new ZipEntry(fileName));
zipOut.closeEntry();
} else {
zipOut.putNextEntry(new ZipEntry(fileName + "/"));
zipOut.closeEntry();
}
File[] children = fileToZip.listFiles();
for (File childFile : children) {
zipFile(childFile, fileName + "/" + childFile.getName(), zipOut);
}
return;
}
FileInputStream fis = new FileInputStream(fileToZip);
ZipEntry zipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(zipEntry);
byte[] bytes = new byte[1024];
int length;
while ((length = fis.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
fis.close();
}
}
輸出
Exception in thread "main" java.io.FileNotFoundException: src (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at ARBRDD.zipFile(ARBRDD.java:37) at ARBRDD.main(ARBRDD.java:14)
示例 4
//Java Program to unzip a compressed .zip file
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.ZipInputStream;
public class UnzipFileARBRDD {
public static void main(String[] args) {
String zipFilePath = "multifilesCompressed.zip";
unzip(zipFilePath);
}
private static void unzip(String zipFilePath) {
File dir = new File(".");
if (!dir.exists())
dir.mkdirs();
FileInputStream fis;
byte[] buffer = new byte[1024];
try {
fis = new FileInputStream(zipFilePath);
ZipInputStream zis = new ZipInputStream(fis);
ZipEntry ze = zis.getNextEntry();
while (ze != null) {
String fileName = ze.getName();
File newFile = new File("." + File.separator + fileName);
System.out.println("Unzipping to " + newFile.getAbsolutePath());
new File(newFile.getParent()).mkdirs();
FileOutputStream fos = new FileOutputStream(newFile);
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
zis.closeEntry();
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
輸出
java.io.FileNotFoundException: multifilesCompressed.zip (No such file or directory) at java.base/java.io.FileInputStream.open0(Native Method) at java.base/java.io.FileInputStream.open(FileInputStream.java:219) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:158) at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112) at UnzipFileARBRDD.unzip(UnzipFileARBRDD.java:20) at UnzipFileARBRDD.main(UnzipFileARBRDD.java:11)
免責宣告 - 在上面提到的每個 Java 程式碼中,使用者在執行此程式碼時都會遇到異常。提到的異常僅針對檔案路徑,這是每個使用者及其系統的唯一語句。
結論
在 Java 環境中,引入了 DeflaterOutputStream 和 InflaterInputStream 類來壓縮和解壓縮檔案內容,它們提供了可用於將檔案內容壓縮到 ZIP 檔案中的有用方法。在本文中,我們學習瞭如何使用 Java 函式執行壓縮操作。透過上面提到的語法和 Java 方法以及演算法,我們嘗試以有效的方式解決問題陳述。
另請參閱: Java 面試問題及答案
資料結構
網路
關係資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP