SimpleZip.java
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.BufferedInputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.zip.ZipException;
/** 単独のファイルを zip形式にファイルを圧縮する SimpleZip */
public class SimpleZip {
/** ファイルの読み込みの終わりを表す定数 */
protected static final int EOF = -1;
/** Zip形式のファイル(ZipFileのクラスではない) */
protected static File zf;
/** 最初に呼び出される処理 */
public static void main( String argv[] ) {
if( argv.length == 1 ) {
try {
File file = new File( argv[0] );
zf = new File( file.getName() + ".zip" );
compressFile( file );
}
catch( FileNotFoundException e ){
System.out.println( "file not found" );
}
catch( ZipException e ){
System.out.println( "Zip error..." );
}
catch( IOException e ){
System.out.println( "IO error..." );
}
}
else {
System.out.println( "Usage:java GZip file" );
}
}
/** 与えられたファイルを圧縮する */
public static void compressFile( File file )
throws FileNotFoundException,ZipException,IOException {
try {
FileInputStream fis = new FileInputStream( file );
BufferedInputStream bis = new BufferedInputStream( fis );
FileOutputStream fos = new FileOutputStream( zf );
ZipOutputStream zos = new ZipOutputStream( fos );
ZipEntry target = new ZipEntry( file.getPath() );
zos.putNextEntry( target );
/* バッファリングは自動的に行われるので、ここで指定している
バッファサイズは、特別に意味は持たない */
byte buf[] = new byte[1024];
int count;
while( ( count = bis.read( buf, 0, 1024 ) ) != EOF ) {
zos.write( buf, 0, count );
}
bis.close(); // fis より先にクローズすること
fis.close();
zos.closeEntry();
zos.close(); // fos より先にクローズすること
fos.close();
}
catch( FileNotFoundException e ){
throw e;
}
catch( ZipException e ){
throw e;
}
catch( IOException e ){
throw e;
}
}
}