KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > hsqldb > lib > ZipUnzipFile


1 /* Copyright (c) 1995-2000, The Hypersonic SQL Group.
2  * All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions are met:
6  *
7  * Redistributions of source code must retain the above copyright notice, this
8  * list of conditions and the following disclaimer.
9  *
10  * Redistributions in binary form must reproduce the above copyright notice,
11  * this list of conditions and the following disclaimer in the documentation
12  * and/or other materials provided with the distribution.
13  *
14  * Neither the name of the Hypersonic SQL Group nor the names of its
15  * contributors may be used to endorse or promote products derived from this
16  * software without specific prior written permission.
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL THE HYPERSONIC SQL GROUP,
22  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  *
30  * This software consists of voluntary contributions made by many individuals
31  * on behalf of the Hypersonic SQL Group.
32  *
33  *
34  * For work added by the HSQL Development Group:
35  *
36  * Copyright (c) 2001-2005, The HSQL Development Group
37  * All rights reserved.
38  *
39  * Redistribution and use in source and binary forms, with or without
40  * modification, are permitted provided that the following conditions are met:
41  *
42  * Redistributions of source code must retain the above copyright notice, this
43  * list of conditions and the following disclaimer.
44  *
45  * Redistributions in binary form must reproduce the above copyright notice,
46  * this list of conditions and the following disclaimer in the documentation
47  * and/or other materials provided with the distribution.
48  *
49  * Neither the name of the HSQL Development Group nor the names of its
50  * contributors may be used to endorse or promote products derived from this
51  * software without specific prior written permission.
52  *
53  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
54  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
55  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
56  * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG,
57  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
58  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
59  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
60  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
61  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
62  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
63  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
64  */

65
66
67 package org.hsqldb.lib;
68
69 import java.io.IOException JavaDoc;
70 import java.io.InputStream JavaDoc;
71 import java.io.OutputStream JavaDoc;
72 import java.util.zip.Deflater JavaDoc;
73 import java.util.zip.DeflaterOutputStream JavaDoc;
74 import java.util.zip.Inflater JavaDoc;
75 import java.util.zip.InflaterInputStream JavaDoc;
76
77 // oj@openoffice.org - patch 1.8.0 - use FileAccess
78

79 /**
80  *
81  * New Class based on original Hypersonic code.
82  *
83  * @author Thomas Mueller (Hypersonic SQL Group)
84  * @version 1.7.2
85  * @since Hypersonic SQL
86  */

87 public class ZipUnzipFile {
88
89     private static final int COPY_BLOCK_SIZE = 1 << 16;
90
91     public static void compressFile(String JavaDoc infilename, String JavaDoc outfilename,
92                                     FileAccess storage) throws IOException JavaDoc {
93
94         InputStream JavaDoc in = null;
95         DeflaterOutputStream JavaDoc f = null;
96         boolean completed = false;
97
98         // if there is no file
99
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 JavaDoc(
108                 storage.openOutputStreamElement(outfilename),
109                 new Deflater JavaDoc(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 JavaDoc 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(); // reported to be missing from close() in some JRE libs
132
f.close();
133                 }
134
135                 if (!completed && storage.isStreamElement(outfilename)) {
136                     storage.removeElement(outfilename);
137                 }
138             } catch (Throwable JavaDoc e) {
139                 throw FileUtil.toIOException(e);
140             }
141         }
142     }
143
144     public static void decompressFile(String JavaDoc infilename, String JavaDoc outfilename,
145                                       FileAccess storage) throws IOException JavaDoc {
146
147         InflaterInputStream JavaDoc f = null;
148         OutputStream JavaDoc 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 JavaDoc(
159                 storage.openInputStreamElement(infilename), new Inflater JavaDoc());
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 JavaDoc 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 JavaDoc e) {
191                 throw FileUtil.toIOException(e);
192             }
193         }
194     }
195 }
196
Popular Tags