Compressing Files and Directories
Example 3-5
demonstrates an interesting application of stream classes: compressing
files and directories. The classes of interest in this example are not
actually part of the java.io
package, but instead part of the java.util.zip
package. The Compress
class defines two static methods,
gzipFile( )
, which compresses a
file using GZIP compression format, and zipDirectory( )
, which compresses the files
(but not directories) in a directory using the ZIP archive and
compression format. gzipFile( )
uses the GZIPOutputStream
class,
while zipDirectory( )
uses the
ZipOutputStream
and ZipEntry
classes, all from java.util.zip
.
This example demonstrates the versatility of the stream classes
and shows again how streams can be wrapped around one another so that
the output of one stream becomes the input of another. This technique
makes it possible to achieve a great variety of effects. Notice again
the while
loop in both methods that
does the actual copying of data from source file to compressed file.
These methods do not attempt to handle exceptions; instead they just
pass them on to the caller, which is often exactly the right thing to
do.
Compress
is meant to be used
as a utility class by other programs, so it doesn’t itself include a
main( )
method. The example does
include an inner Compress.Test
class, however, which has a main( )
method that can test the gzipFile(
)
and zipDirectory( )
methods.
Example 3-5. Compress.java
package je3.io; import java.io.*; ...
Get Java Examples in a Nutshell, 3rd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.