通常、ZIP形式を使用してフォルダを圧縮する方法は、以下のようになります。java.util.zipパッケージを使用してフォルダを圧縮できます。以下に、サンプルコードを示します。
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 ZipUtils {
private static final int BUFFER_SIZE = 4096;
// メソッドは、指定されたフォルダ(sourceFolder)を ZIP ファイル(zipFile)として圧縮
public static void zipFolder(File sourceFolder, File zipFile) throws IOException {
//File sourceFolder: 圧縮したい元のフォルダ。
//File zipFile: 出力先の ZIP ファイル。
//FileOutputStream を使って ZIP ファイルを書き出す準備。
//ZipOutputStream を使って ZIP 形式でデータを書き込む。
//addFolderToZip メソッドを呼び出して、フォルダの中身を再帰的に ZIP に追加。
try (FileOutputStream fos = new FileOutputStream(zipFile);
ZipOutputStream zos = new ZipOutputStream(fos)) {
addFolderToZip(sourceFolder, sourceFolder.getName(), zos);
}
}
//指定されたフォルダの中身を ZIP に追加する処理の一部で、特に再帰的にフォルダをたどってファイルを追加する構造
private static void addFolderToZip(File folder, String parentFolder, ZipOutputStream zos) throws IOException {
File[] files = folder.listFiles();
if (files == null) {
return;
}
//フォルダ内のすべてのファイル・サブフォルダを順番に処理するループ。
for (File file : files) {
if (file.isDirectory()) {
addFolderToZip(file, parentFolder + "/" + file.getName(), zos);
} else {
addFileToZip(file, parentFolder, zos);
}
}
}
//ZIP ファイルに1つのファイルを追加する処理
private static void addFileToZip(File file, String parentFolder, ZipOutputStream zos) throws IOException {
try (FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis, BUFFER_SIZE)) {
String zipEntryName = parentFolder + "/" + file.getName();
ZipEntry zipEntry = new ZipEntry(zipEntryName);
zos.putNextEntry(zipEntry);
byte[] buffer = new byte[BUFFER_SIZE];
int length;
while ((length = bis.read(buffer)) >= 0) {
zos.write(buffer, 0, length);
}
zos.closeEntry();
}
}
}
このサンプルコードでは、ZipUtils クラスを定義し、フォルダを圧縮するためのメソッド zipFolder を提供しています。zipFolder メソッドは、指定されたフォルダを再帰的に読み取り、すべてのファイルとサブフォルダをZIPファイルに追加します。
使用方法は以下の通りです。
java
File sourceFolder = new File("/path/to/source/folder");
File zipFile = new File("/path/to/destination/folder.zip");
try {
ZipUtils.zipFolder(sourceFolder, zipFile);
// フォルダが正常に圧縮されました
} catch (IOException e) {
e.printStackTrace();
// エラーが発生しました
}



コメント