1 65 66 67 package org.hsqldb.lib; 68 69 import java.io.IOException ; 70 import java.io.InputStream ; 71 import java.io.OutputStream ; 72 import java.util.zip.Deflater ; 73 import java.util.zip.DeflaterOutputStream ; 74 import java.util.zip.Inflater ; 75 import java.util.zip.InflaterInputStream ; 76 77 79 87 public class ZipUnzipFile { 88 89 private static final int COPY_BLOCK_SIZE = 1 << 16; 90 91 public static void compressFile(String infilename, String outfilename, 92 FileAccess storage) throws IOException { 93 94 InputStream in = null; 95 DeflaterOutputStream f = null; 96 boolean completed = false; 97 98 if (!storage.isStreamElement(infilename)) { 100 return; 101 } 102 103 try { 104 byte[] b = new byte[COPY_BLOCK_SIZE]; 105 106 in = storage.openInputStreamElement(infilename); 107 f = new DeflaterOutputStream ( 108 storage.openOutputStreamElement(outfilename), 109 new Deflater (Deflater.BEST_SPEED), COPY_BLOCK_SIZE); 110 111 while (true) { 112 int l = in.read(b, 0, COPY_BLOCK_SIZE); 113 114 if (l == -1) { 115 break; 116 } 117 118 f.write(b, 0, l); 119 } 120 121 completed = true; 122 } catch (Throwable e) { 123 throw FileUtil.toIOException(e); 124 } finally { 125 try { 126 if (in != null) { 127 in.close(); 128 } 129 130 if (f != null) { 131 f.finish(); f.close(); 133 } 134 135 if (!completed && storage.isStreamElement(outfilename)) { 136 storage.removeElement(outfilename); 137 } 138 } catch (Throwable e) { 139 throw FileUtil.toIOException(e); 140 } 141 } 142 } 143 144 public static void decompressFile(String infilename, String outfilename, 145 FileAccess storage) throws IOException { 146 147 InflaterInputStream f = null; 148 OutputStream outstream = null; 149 boolean completed = false; 150 151 try { 152 if (!storage.isStreamElement(infilename)) { 153 return; 154 } 155 156 storage.removeElement(outfilename); 157 158 f = new InflaterInputStream ( 159 storage.openInputStreamElement(infilename), new Inflater ()); 160 outstream = storage.openOutputStreamElement(outfilename); 161 162 byte[] b = new byte[COPY_BLOCK_SIZE]; 163 164 while (true) { 165 int l = f.read(b, 0, COPY_BLOCK_SIZE); 166 167 if (l == -1) { 168 break; 169 } 170 171 outstream.write(b, 0, l); 172 } 173 174 completed = true; 175 } catch (Throwable e) { 176 throw FileUtil.toIOException(e); 177 } finally { 178 try { 179 if (f != null) { 180 f.close(); 181 } 182 183 if (outstream != null) { 184 outstream.close(); 185 } 186 187 if (!completed && storage.isStreamElement(outfilename)) { 188 storage.removeElement(outfilename); 189 } 190 } catch (Throwable e) { 191 throw FileUtil.toIOException(e); 192 } 193 } 194 } 195 } 196 | Popular Tags |