Dear Wiki user, You have subscribed to a wiki page or wiki category on "Commons Wiki" for change notification.
The following page has been changed by ChristianGrobmeier: http://wiki.apache.org/commons/Compress The comment on the change is: modified everything to fit to new implementation, creating link to todo list ------------------------------------------------------------------------------ ##language:en = Component Overview = - Compress is an API for working with tar, zip and bzip2 files. + Compress is an API for working with the following files: tar, zip, bzip2, cpio, ar, gz, jar. = Quick Start = - *compress* is divided between Compressors and Archivers. While you have - to get an Archiver from a factory when just archiving one or more files - to the target file (tar), you'll need a Compressor for reducing the files size (bzip2). + *compress* is a stream based API. It's original code in this component came from Avalon's Excalibur, but originally from Ant, as far as life in Apache goes. It has migrated via: + Ant -> Avalon-Excalibur -> Commons-IO -> Commons-Compress. + More credits can be found in NOTICE.txt file. + + *compress* divides the implementation in Compressors and Archivers. For each one an factory is implemented. + Basically you have to get the stream implementation from the factory, create an entry, put this into the stream and stream. + + Some experimental code makes it possible to modify archiver and compressor files. This means you can delete from for example a zip file. Please note: - There are discussion of "sponsoring" compress with code from TrueZip (https://truezip.dev.java.net/) - and of enhancing compress design. At the moment the current implementation - is considered as complex by some people. An deeper look at compress implementation - can be found on the CompressImplementationDetails page. + There were discussion of "sponsoring" compress with code from TrueZip (https://truezip.dev.java.net/). The result was, not to include any code from this project (see mailinglists). + There was a discussion about the complex file based implementation too. The result was to start again with a stream based implementation and move the old one to a branch. More information about the old implementation can be found on the CompressImplementationDetails page. + + = Roadmap = + Compress looks like moving to proper now and prepares for the first release. If you want to help, here is the CompressRoadmap. == Archiver == - To pack an archive, you have to get an archiver via the ArchiverFactory. At the moment it's possible to get a "zip" or a "tar" archiver. Add your files to the archiver and call save to store the archive. + To pack an archive, you have to get an archiver stream via the ArchiverFactory. Add your streams to the archiver and stream. + Archiver streams are: ZIP, CPIO, AR, TAR, JAR. - === Packing a ZIP-File === + === Creating a ZIP-File === - {{{Archive archiver = ArchiverFactory.getInstance("zip"); - archiver.add( new File("C:\\Temp\\1.html")); - archiver.add( new File("C:\\Temp\\1.html.bz2")); - archiver.save( new File("C:\\Temp\\ZIPTEST.zip"));}}} + + {{{final OutputStream out = new FileOutputStream(output); + ArchiveOutputStream os = new ArchiveStreamFactory().createArchiveOutputStream("zip", out); + + os.putArchiveEntry(new ZipArchiveEntry("testdata/test1.xml")); + IOUtils.copy(new FileInputStream(file1), os); + os.closeArchiveEntry(); + + os.putArchiveEntry(new ZipArchiveEntry("testdata/test2.xml")); + IOUtils.copy(new FileInputStream(file2), os); + os.closeArchiveEntry(); + os.close();}}} === Unpacking a ZIP-File === - {{{Archive archiver = ArchiverFactory.getInstance( - new File("C:\\Temp\\ZIPTEST.zip")); - archiver.unpack( new File("C:\\Temp\\unpacked\\"));}}} + {{{final InputStream is = new FileInputStream(input); + ArchiveInputStream in = new ArchiveStreamFactory().createArchiveInputStream("zip", is); + ZipArchiveEntry entry = (ZipArchiveEntry)in.getNextEntry(); + OutputStream out = new FileOutputStream(new File(dir, entry.getName())); + IOUtils.copy(in, out); + out.close(); + in.close();}}} == Compressor == - Same goes for Compressor. At the moment there is only "bz2" support. + Same goes for Compressor. Compressor streams are: bz2 and gz. === Compressing a file === - {{{Compressor compressor; - compressor = CompressorFactory.getInstance("bz2"); - compressor.compressToHere( new File("C:\\Temp\\test.tar"));}}} + {{{final OutputStream out = new FileOutputStream(output); + CompressorOutputStream cos = new CompressorStreamFactory().createCompressorOutputStream("bzip2", out); + IOUtils.copy(new FileInputStream(input), cos); + cos.close();}}} === Decompressing a file === - {{{Compressor decompressor; - decompressor = CompressorFactory.getInstance("bz2"); - decompressor.decompressTo( new File("C:\\Temp\\asf-logo-huge.tar.bz2"), - new File("C:\\Temp\\asf-logo-huge.tar"));}}} + {{{final InputStream is = new FileInputStream(input); + CompressorInputStream in = new CompressorStreamFactory().createCompressorInputStream("bzip2", is); + IOUtils.copy(in, new FileOutputStream(output)); + in.close();}}} = FAQ = ||Add your questions/answers here.|| - = TODO = - - Add delete features - - Enhance implementation design - --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org