//////////////////// ziptest.java ////////////////////
class ziptest
{
public static void main(String args[])
{
ZipInflator inflator = new ZipInflator(args[0]);
if(args.length == 1)
{
inflator.InflateFiles();
}
else if(args[1].compareTo("print") == 0)
{
inflator.PrintList();
}
}
}
////////////////////////////////////////////////////////////
//////////////////// ZipInfrator.java ////////////////////
import java.io.*;
import java.util.zip.*;
import java.util.Vector;
class ZipInflator
{
// 解凍されるZIPファイル名
String archive_name;
public ZipInflator(String file_name)
{
archive_name = file_name;
}
protected ZipEntry[] GetFileList()
{
try
{
ZipInputStream input = new ZipInputStream(new FileInputStream(archive_name));
ZipEntry zip_entry;
Vector file_list = new Vector();
// アーカイブ中に含まれるファイル情報の取得
while((zip_entry = input.getNextEntry()) != null)
{
file_list.addElement(zip_entry);
input.closeEntry();
}
ZipEntry return_list[] = new ZipEntry[file_list.size()];
file_list.copyInto(return_list);
input.close();
return(return_list);
}
catch(IOException e)
{
System.err.println(e.toString());
return null;
}
}
public void PrintList()
{
ZipEntry file_list[] = GetFileList();
for(int i=0;i<file_list.length;i++)
{
PrintFileInfo(file_list[i]);
}
}
// ファイル名、解凍後のファイルサイズ、解凍前のファイルサイズの表示
protected void PrintFileInfo(ZipEntry zip_file)
{
String file_name = zip_file.getName();
long src_size = zip_file.getCompressedSize();
long size = zip_file.getSize();
// タブを使った位置揃え
int number_tab = (file_name.length() / 8);
if(number_tab > 3)
number_tab = 3;
number_tab = 3 - number_tab;
String tab = "";
for(int i=0;i<number_tab;i++)
{
tab = tab.concat("\t");
}
System.out.println(file_name + tab + size + "\t" + src_size);
}
public void InflateFiles()
{
try
{
ZipEntry zip_entry;
ZipInputStream input = new ZipInputStream(new FileInputStream(archive_name));
// アーカイブ中の各ファイルを処理
while((zip_entry =input.getNextEntry()) != null)
{
String file_name = zip_entry.getName();
long size = zip_entry.getSize();
// I/Oストリームの作成
FileOutputStream file_out = new FileOutputStream(file_name);
BufferedInputStream buffered_in = new BufferedInputStream(input);
byte data[] = new byte[(int)size];
buffered_in.read(data,0,(int)size);
file_out.write(data);
file_out.close();
input.closeEntry();
}
input.close();
}
catch(IOException e)
{
System.err.println(e.toString());
}
}
}
////////////////////////////////////////////////////////////
Source is here. (ZIP Format,1293Byte,Shift-JIS)