在java中实现tar,gzip功能

在将文件归档时,通常将文件压缩,而程序一般部署在web application 上的,在程序里部署一段程序,就可以实现用JAVA 压缩归档。

程序代码 程序代码

/**
* Compress (tar.gz) the input file (or directory) to the output file
* <p/>
*
* In the case of a directory all files within the directory (and all nested
* directories) will be added to the archive
*
* @param file The file(s if a directory) to compress
* @param output The resulting output file (should end in .tar.gz)
* @throws IOException
*/
public static void compressFile(File file, File output)
    throws IOException
{
    ArrayList<File> list = new ArrayList<File>(1);
    list.add(file);
    compressFiles(list, output);
}

/**
* Compress (tar.gz) the input files to the output file
*
* @param files The files to compress
* @param output The resulting output file (should end in .tar.gz)
* @throws IOException
*/
public static void compressFiles(Collection<File> files, File output)
    throws IOException
{
    LOG.debug("Compressing "+files.size() + " to "+output.getAbsoluteFile());
               // Create the output stream for the output file
    FileOutputStream fos = new FileOutputStream(output);
               // Wrap the output file stream in streams that will tar and gzip everything
    TarArchiveOutputStream taos = new TarArchiveOutputStream(
        new GZIPOutputStream(new BufferedOutputStream(fos)));
               // TAR has an 8 gig file limit by default, this gets around that
    taos.setBigNumberMode(TarArchiveOutputStream.BIGNUMBER_STAR); // to get past the 8 gig limit
               // TAR originally didn't support long file names, so enable the support for it
    taos.setLongFileMode(TarArchiveOutputStream.LONGFILE_GNU);

               // Get to putting all the files in the compressed output file
    for (File f : files) {
        addFilesToCompression(taos, f, ".");
    }

               // Close everything up
    taos.close();
    fos.close();
}

/**
* Does the work of compression and going recursive for nested directories
* <p/>
*
* Borrowed heavily from http://www.thoughtspark.org/node/53
*
* @param taos The archive
* @param file The file to add to the archive
        * @param dir The directory that should serve as the parent directory in the archivew
* @throws IOException
*/
private static void addFilesToCompression(TarArchiveOutputStream taos, File file, String dir)
    throws IOException
{
               // Create an entry for the file
    taos.putArchiveEntry(new TarArchiveEntry(file, dir+FILE_SEPARATOR+file.getName()));
    if (file.isFile()) {
                       // Add the file to the archive
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        IOUtils.copy(bis, taos);
        taos.closeArchiveEntry();
        bis.close();
    }
    else if (file.isDirectory()) {
                       // close the archive entry
        taos.closeArchiveEntry();
                       // go through all the files in the directory and using recursion, add them to the archive
        for (File childFile : file.listFiles()) {
            addFilesToCompression(taos, childFile, file.getName());
        }
    }
}



除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: tar gzip
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.