フォルダを圧縮したい。実はなんとかできましたが、問題があります。ディレクトリに空のフォルダがある場合、zipファイルに空のフォルダは作成されません。たとえば、ディレクトリは次のとおりです。
/フォルダ
/folder/temp.txt
/ folder / emptyfolder
このディレクトリをコードでzipすると、zipファイルにemptyfolderが存在しません。問題が見つかりました。問題はfiles.length==0であるため、forループが機能しません。しかし、解決策が見つかりませんでした。zipファイルに空のフォルダを作成するにはどうすればよいですか?
private static final void zip(File directory, File base,
ZipOutputStream zos) throws IOException {
File[] files;
if(directory.isDirectory()) // folder
{
files = directory.listFiles();
}else
{
files = new File[1]; // file
files[0] = directory;
}
byte[] buffer = new byte[8192];
int read = 0;
for (int i = 0, n = files.length; i < n; i++)
{
if (files[i].isDirectory())
{
zip(files[i], base, zos);
}
else
{
FileInputStream in = new FileInputStream(files[i]);
ZipEntry entry = new ZipEntry(files[i].getPath().substring(
base.getPath().lastIndexOf("/") + 1));
zos.putNextEntry(entry);
while (-1 != (read = in.read(buffer)))
{
zos.write(buffer, 0, read);
}
in.close();
}
}