HOWTO · Java
Java でファイルを圧縮
このチュートリアルでは、Java で zip ファイルを作成する方法を示します。
zip ファイルは、単一のファイル、複数のファイル、またはフォルダーで構成できます。 zip ファイルを作成するには、さまざまな方法があります。
このチュートリアルでは、Java で zip ファイルを作成するさまざまな例を示します。
Java.Util.Zip を使用して Java で単一のファイルを圧縮する
java.util.zip.ZipOutputStream クラスを使用して、Java で単一のファイルを圧縮できます。 以下の例を参照してください。
package delftstack;
import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
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\\delftstack1.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();
}
}
}
上記のコードは、単一ファイル delftstack1 のみを含む zip ファイルを作成します。
出力:
Zip File Created
Java.Util.Zip を使用して Java で複数のファイルを圧縮する
同様に、java.util.zip.ZipOutputStream を使用して複数のファイルを zip ファイルに追加できます。 複数のファイルが 1つずつ zip ファイルに追加されます。
次の例を参照してください。
package delftstack;
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\\delftstack1.txt";
String Source_File2 = "C:\\Users\\Sheeraz\\OneDrive\\Desktop\\ZipFiles\\\\delftstack2.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 delftstack;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
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\delftstack1.txt
Zipped file : C:\Users\Sheeraz\OneDrive\Desktop\ZipFiles\Folder\delftstack2.txt
Folder is zipped
ファイル システムや zip4j など、ファイルやフォルダーを圧縮できる他の方法もあります。 ただし、Java.Util.Zip は、ファイルとフォルダーを圧縮する最も効率的な方法と考えられています。