チェンジセット 354

差分発生行の前後
無視リスト:
コミット日時:
2008/10/30 14:17:34 (14 年前)
コミッタ:
shinomiya
ログメッセージ:

ストリームでzip/unzipできるようにメソッド追加。
#unzip(InputStream?, File), #unzip(byte[], File), #zip(InputStream?, String, File)

ちなみに、、、ラップする形でメソッドを追加したので、テストケースの追加は最小にとどめた。djUnitでのテスト網羅性もこれでOKとする。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • trunk/im-jssp/src/main/java/org/intra_mart/common/aid/jdk/java/util/Archiver.java

    r347 r354  
    4343                        throw new IllegalArgumentException("Argument 'binary' cannot specify empty string."); 
    4444                } 
    45                  
    46                  
     45 
     46                ByteArrayInputStream bai = new ByteArrayInputStream(binary); 
     47                InputStream is = new BufferedInputStream(bai); 
     48                 
     49                zip(is, fileName, dest); 
     50        } 
     51         
     52        /** 
     53         * バイト配列をZIP形式で圧縮します。<br/> 
     54         *  
     55         * @param src 圧縮対象のバイト入力ストリーム 
     56         * @param fileName 圧縮時のファイル名 
     57         * @param dest ZIPファイルの出力先 
     58         * @throws IOException 入出力エラーが発生した場合 
     59         */ 
     60        public static void zip(final InputStream src, final String fileName, final File dest) throws IOException { 
     61                 
     62                if(src == null || fileName == null || dest == null){ 
     63                        throw new IllegalArgumentException("Argument 'binary', 'fileName' and 'dest' cannot specify null."); 
     64                } 
     65                                 
    4766                ZipOutputStream zos = null; 
    4867                InputStream is = null; 
     
    5675                        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest)); 
    5776                        zos = new ZipOutputStream(bos); 
    58  
    59                         ByteArrayInputStream bai = new ByteArrayInputStream(binary); 
    60                         is = new BufferedInputStream(bai); 
    61                          
    62                         writeEntry(zos, is, fileName); 
     77                         
     78                        writeEntry(zos, src, fileName); 
    6379                } 
    6480                finally{ 
     
    7995        } 
    8096         
    81          
     97         
    8298        /** 
    8399         * 指定されたファイルやディレクトリをZIP形式で圧縮します。<br/> 
     
    170186                } 
    171187                 
     188                FileInputStream fis = new FileInputStream(src); 
     189                BufferedInputStream bis = new BufferedInputStream(fis); 
     190 
     191                unzip(bis, dest); 
     192        } 
     193 
     194        /** 
     195         * ZIPファイルを解凍します。<br/> 
     196         *  
     197         * @param binary ZIP形式のバイト配列 
     198         * @param dest 解凍先ディレクトリ 
     199         * @throws IOException 入出力エラーが発生した場合 
     200         * @throws ZipException ZIP 形式エラーが発生した場合 
     201         */ 
     202        public static void unzip(final byte[] binary, final File dest) throws IOException, ZipException { 
     203                if(binary == null || dest == null){ 
     204                        throw new IllegalArgumentException("Argument 'binary' and 'dest' cannot specify null."); 
     205                } 
     206 
     207                ByteArrayInputStream bai = new ByteArrayInputStream(binary); 
     208                InputStream is = new BufferedInputStream(bai); 
     209                 
     210                unzip(is, dest); 
     211        } 
     212 
     213        /** 
     214         * ZIPファイルを解凍します。<br/> 
     215         *  
     216         * @param src ZIP形式のバイト入力ストリーム 
     217         * @param dest 解凍先ディレクトリ 
     218         * @throws IOException 入出力エラーが発生した場合 
     219         * @throws ZipException ZIP 形式エラーが発生した場合 
     220         */ 
     221        public static void unzip(final InputStream src, final File dest) throws IOException, ZipException { 
     222 
     223                if(src == null || dest == null){ 
     224                        throw new IllegalArgumentException("Argument 'src' and 'dest' cannot specify null."); 
     225                } 
     226                 
    172227                if(dest.exists()){ 
    173228                        deleteFileRecursive(dest); 
     
    179234                 
    180235                try{ 
    181                         FileInputStream fis = new FileInputStream(src); 
    182                         BufferedInputStream bis = new BufferedInputStream(fis); 
    183                         zis = new ZipInputStream(new BufferedInputStream(bis)); 
     236                        zis = new ZipInputStream(src); 
    184237                         
    185238                        boolean isExistZipEntry = false; 
     
    224277                                } 
    225278                                zis.closeEntry(); 
    226                                  
    227279                        } 
    228280                         
  • trunk/im-jssp/src/test/java/org/intra_mart/common/aid/jdk/java/util/ArchiverTest.java

    r352 r354  
    99import java.io.IOException; 
    1010import java.io.InputStream; 
     11import java.io.OutputStream; 
    1112import java.net.URL; 
    1213import java.util.zip.ZipException; 
     
    736737                Archiver.unzip(src, dest); 
    737738 
     739                assertTrue("出力先ディレクトリが存在する事", dest.exists()); 
     740                assertTrue("出力先がディレクトリである事", dest.isDirectory()); 
     741 
     742                String expected = load("/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/001_plain_text.txt"); 
     743                String actual = load(new File(dest, "001_plain_text.txt")); 
     744                assertEquals("ZIP解凍後の内容が正しい事", expected, actual); 
     745        }        
     746 
     747         
     748        /** 
     749         * @throws Exception 
     750         */ 
     751        public void test_unzipByteFile_srcが001_plain_text_zip() throws Exception { 
     752                URL url = this.getClass().getResource("/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/001_plain_text.zip"); 
     753 
     754                File src  = new File(url.getPath()); 
     755                File dest = new File("target/test/test_unzipFileFile_srcが001_plain_text_zip/"); 
     756                 
     757                int n; 
     758                byte[] buf = new byte[1024]; 
     759                InputStream in = new FileInputStream(src); 
     760                OutputStream out = new ByteArrayOutputStream(); 
     761                try{ 
     762                        while((n = in.read(buf, 0, buf.length)) != -1){ 
     763                                out.write(buf, 0, n); 
     764                        } 
     765                } finally{ 
     766                        in.close(); 
     767                        out.close(); 
     768                } 
     769 
     770                ByteArrayOutputStream baos = (ByteArrayOutputStream) out; 
     771                Archiver.unzip(baos.toByteArray(), dest); 
     772                 
    738773                assertTrue("出力先ディレクトリが存在する事", dest.exists()); 
    739774                assertTrue("出力先がディレクトリである事", dest.isDirectory());