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;
            }
      }
}