チェンジセット 376
- コミット日時:
- 2008/12/26 17:45:39 (13 年前)
- ファイル:
-
- trunk/im-jssp/src/main/java/org/intra_mart/common/aid/jdk/java/util/Archiver.java (更新) (2 diffs)
- trunk/im-jssp/src/test/java/org/intra_mart/common/aid/jdk/java/util/ArchiverTest.java (更新) (1 diff)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/000_this_file_is_0KB.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/001_plain_text.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/bar (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/bar/000_this_file_is_0KB.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/bar/001_plain_text.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/bar/im-jssp-api-list-0.1.2.zip (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/bar/oim_banner01.gif (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/empty_dir (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/copy_of_000_this_file_is_0KB.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/copy_of_001_plain_text.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/copy_of_im-jssp-api-list-0.1.2.zip (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/copy_of_oim_banner01.gif (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/empty_dir (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2 (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2/000_this_file_is_0KB.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2/001_plain_text.txt (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2/empty_dir (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2/im-jssp-api-list-0.1.2.zip (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/foo/foo2/oim_banner01.gif (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/im-jssp-api-list-0.1.2.zip (追加)
- trunk/im-jssp/src/test/resources/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/oim_banner01.gif (追加)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
trunk/im-jssp/src/main/java/org/intra_mart/common/aid/jdk/java/util/Archiver.java
r355 r376 125 125 } 126 126 127 File[] sources = { src }; 128 zip(sources, dest, filter); 129 } 130 131 /** 132 * 指定されたファイルやディレクトリをZIP形式で圧縮します。<br/> 133 * 圧縮するファイルやディレクトリは、複数指定することが可能です。 134 * 135 * @param sources 圧縮するファイル、または、ディレクトリの配列。 136 * @param destination ZIPファイルの出力先 137 * @param filter 138 * このクラスは、ディレクトリの圧縮処理を行う際、そのディレクトリ配下に含まれるファイルを走査します。<br/> 139 * 走査されたファイルは、この引数に設定されたフィルタの実行結果によって圧縮対象のファイルか否かを判定します。<br/> 140 * フィルタが true を返却した場合、該当ファイルは圧縮対象となります。<br/> 141 * フィルタが false を返却した場合、該当ファイルは圧縮対象から<b>外れます</b>。<br/> 142 * フィルタが未指定の場合、すべてのファイルが圧縮対象となります。<br/> 143 * @throws IOException 入出力エラーが発生した場合 144 */ 145 public static void zip(final File[] sources, final File destination, final FileFilter filter) throws IOException { 146 147 if(sources == null || destination == null){ 148 throw new IllegalArgumentException("Argument 'sources' and 'destination' cannot specify null."); 149 } 150 127 151 ZipOutputStream zos = null; 128 152 InputStream is = null; 129 153 130 154 try { 131 if(dest .exists()){132 deleteFileRecursive(dest );133 } 134 dest .getParentFile().mkdirs();135 136 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dest ));155 if(destination.exists()){ 156 deleteFileRecursive(destination); 157 } 158 destination.getParentFile().mkdirs(); 159 160 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destination)); 137 161 zos = new ZipOutputStream(bos); 138 162 139 if(src != null){ 140 if(src.exists()){ 141 if(src.isDirectory()){ 142 writeDirEntry(zos, src, null, filter); 163 int srcLength = sources.length; 164 for(int idx = 0; idx < srcLength; idx++){ 165 File src = sources[idx]; 166 167 if(!src.exists()){ 168 jdkLogger.warning("skipping zip archive because file/dir is not found: " + src); 169 continue; 170 } 171 172 if(src.isDirectory()){ 173 if(src.list().length == 0){ 174 jdkLogger.warning("skipping zip archive because no files were included: " + src); 175 continue; 143 176 } 144 else{ 145 if( filter == null || filter.accept(src) == true ){ 146 writeEntry(zos, new FileInputStream(src), src.getName()); 147 } 177 178 writeDirEntry(zos, src, null, filter); 179 } 180 else{ 181 if( filter == null || filter.accept(src) == true ){ 182 writeEntry(zos, new FileInputStream(src), src.getName()); 148 183 } 149 184 } … … 166 201 } 167 202 } 168 203 204 169 205 /** 170 206 * ZIPファイルを解凍します。<br/> trunk/im-jssp/src/test/java/org/intra_mart/common/aid/jdk/java/util/ArchiverTest.java
r375 r376 611 611 } 612 612 613 /** 614 * @throws Exception 615 */ 616 public void test_zipFile配列FileFileFilter() throws Exception { 617 File temp = new File(tempDir, "test_zipFile配列FileFileFilter"); 618 URL url = this.getClass().getResource("/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/003_for_FileArray/"); 619 620 try{ 621 File src_0 = new File(getDecodePath(url), "oim_banner01.gif"); // ファイル指定 622 File src_1 = new File(getDecodePath(url), "bar/001_plain_text.txt"); // ファイル指定(サブディレクトリ) 623 File src_2 = new File(getDecodePath(url), "bar/000_this_file_is_0KB.txt"); // ファイル指定(filterで弾かれるファイル) 624 File src_3 = new File(getDecodePath(url), "foo/"); // ディレクトリ指定 625 626 File[] sources = {src_0, src_1, src_2, src_3}; 627 File destination = new File(temp, "test_zipFile配列FileFileFilter.zip"); 628 System.out.println("destination: " + destination); 629 630 FileFilter filter = new FileFilter(){ 631 public boolean accept(File pathname) { 632 // ファイル名に「000_」が含まれるファイルは圧縮しない 633 if(pathname.getName().indexOf("000_") == -1){ 634 return true; 635 } 636 else{ 637 return false; 638 } 639 } 640 }; 641 642 Archiver.zip(sources, destination, filter); 643 644 // 確認 645 File unzipSrc = destination; 646 File unzipDest = new File(temp, "/target"); 647 Archiver.unzip(unzipSrc, unzipDest); // unzipが正しく動作していることが前提 648 649 File targetDir; 650 String target; 651 String result; 652 String origin; 653 654 targetDir = unzipDest; 655 assertEquals("「ルート/」のファイル数が正しいこと", 7, targetDir.listFiles().length); 656 657 target = "oim_banner01.gif"; 658 result = load(new File(unzipDest, target)); 659 origin = load(src_0); 660 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 661 662 target = "001_plain_text.txt"; 663 result = load(new File(unzipDest, target)); 664 origin = load(src_1); 665 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 666 // ↑サブディレクトリ「bar」の下に作られないことに注意 667 668 target = "copy_of_001_plain_text.txt"; 669 result = load(new File(unzipDest, target)); 670 origin = load(new File(src_3, target)); 671 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 672 673 target = "copy_of_im-jssp-api-list-0.1.2.zip"; 674 result = load(new File(unzipDest, target)); 675 origin = load(new File(src_3, target)); 676 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 677 678 target = "copy_of_oim_banner01.gif"; 679 result = load(new File(unzipDest, target)); 680 origin = load(new File(src_3, target)); 681 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 682 683 // ============ empty_dir ============ ← 「foo/empty_dir/」ではなく「empty_dir/」として圧縮されます。 684 target = "empty_dir"; 685 assertTrue("ZIP圧縮の内容が正しい事(" + target + ")", new File(unzipDest, target).isDirectory()); 686 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", 0, new File(unzipDest, target).list().length); 687 assertTrue("ZIP圧縮の内容が正しい事(" + target + ")", new File(src_3, target).isDirectory()); 688 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", 0, new File(src_3, target).list().length); 689 690 691 // ============= foo2 ============= ← 「foo/foo2/」ではなく「foo2/」として圧縮されます。 692 targetDir = new File(unzipDest, "foo2"); 693 assertEquals("「foo2/」のファイル数が正しいこと", 4, targetDir.listFiles().length); 694 695 target = "foo2/001_plain_text.txt"; 696 result = load(new File(unzipDest, target)); 697 origin = load(new File(src_3, target)); 698 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 699 700 target = "foo2/im-jssp-api-list-0.1.2.zip"; 701 result = load(new File(unzipDest, target)); 702 origin = load(new File(src_3, target)); 703 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 704 705 target = "foo2/oim_banner01.gif"; 706 result = load(new File(unzipDest, target)); 707 origin = load(new File(src_3, target)); 708 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", result, origin); 709 710 // ============ foo2/empty_dir ============ ← 「foo/foo2/empty_dir/」ではなく「foo2/empty_dir/」として圧縮されます。 711 target = "foo2/empty_dir"; 712 assertTrue("ZIP圧縮の内容が正しい事(" + target + ")", new File(unzipDest, target).isDirectory()); 713 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", 0, new File(unzipDest, target).list().length); 714 assertTrue("ZIP圧縮の内容が正しい事(" + target + ")", new File(src_3, target).isDirectory()); 715 assertEquals("ZIP圧縮の内容が正しい事(" + target + ")", 0, new File(src_3, target).list().length); 716 717 } 718 finally{ 719 deleteDir(temp); 720 } 721 } 722 723 public void test_zipFile配列FileFileFilter_ZipException_duplicate_entry発生() throws Exception { 724 File temp = new File(tempDir, "test_zipFile配列FileFileFilter"); 725 URL url = this.getClass().getResource("/org/intra_mart/common/aid/jdk/java/util/ArchiverTest/dir_test/002_3_hierarchy/"); 726 727 try{ 728 File src_0 = new File(getDecodePath(url), "oim_banner01.gif"); // ファイル指定 729 File src_1 = new File(getDecodePath(url), "foo/"); // ディレクトリ指定(この直下に上記と同名ファイルがある) 730 731 File[] sources = {src_0, src_1}; 732 File destination = new File(temp, "test_zipFile配列FileFileFilter_ZipException_duplicate_entry発生.zip"); 733 734 try{ 735 Archiver.zip(sources, destination, null); 736 fail("例外が発生する必要があります"); 737 } 738 catch(Exception e){ 739 assertTrue("ZipExceptionが発生する事", e instanceof ZipException); 740 } 741 } 742 finally{ 743 deleteDir(temp); 744 } 745 } 746 613 747 /** 614 748 * @throws Exception