zoukankan      html  css  js  c++  java
  • How to append files to a .tar archive using Apache Commons Compress?(转)

    I created a copy of the tar archive and copied to entire content to it. Then I delete the old tar archive.

    public void appendFileInTarArchive(String tarPath, String tarFileName, String file2WriteName, String file2WriteContent) throws AuthenticationException, IOException {
        if (tarPath == null || tarFileName == null || tarFileName.isEmpty()) {
            LOG.warn("The path or the name of the tar archive is null or empty.");
            return;
        }
        final File tarFile = new File(tarPath, tarFileName);
        final File fileToAdd = new File(tarPath, file2WriteName);
        FileUtils.write(fileToAdd, file2WriteContent);
    
        if (file2WriteName == null || file2WriteName.isEmpty()) {
            LOG.warn("The name of the file to append in the archive is null or empty.");
            return;
        }
    
        ArchiveStreamFactory asf = new ArchiveStreamFactory();
    
        File tempFile = new File(tarPath, "tmpTar.tar");
        tempFile.createNewFile();
    
        try {
            FileInputStream fis = new FileInputStream(tarFile);
            ArchiveInputStream ais = asf.createArchiveInputStream(ArchiveStreamFactory.TAR, fis);
    
            FileOutputStream fos = new FileOutputStream(tempFile);
            ArchiveOutputStream aos = asf.createArchiveOutputStream(ArchiveStreamFactory.TAR, fos);
    
            // copy the existing entries    
            ArchiveEntry nextEntry;
            while ((nextEntry = ais.getNextEntry()) != null) {
                aos.putArchiveEntry(nextEntry);
                IOUtils.copy(ais, aos);
                aos.closeArchiveEntry();
            }
    
            // create the new entry
            TarArchiveEntry entry = new TarArchiveEntry(file2WriteName);
            entry.setSize(fileToAdd.length());
            aos.putArchiveEntry(entry);
            IOUtils.copy(new FileInputStream(fileToAdd), aos);
            aos.closeArchiveEntry();
    
            aos.finish();
    
            ais.close();
            aos.close();
    
            // copies the new file over the old
            tarFile.delete();
            tempFile.renameTo(tarFile);
    
        } catch (ArchiveException e) {
            LOG.error(e.getMessage(), e);
        } catch (IOException e) {
            LOG.error(e.getMessage(), e);
        } finally {
            FileUtils.deleteQuietly(fileToAdd);
        }
    }

    http://stackoverflow.com/questions/12890508/how-to-append-files-to-a-tar-archive-using-apache-commons-compress?rq=1

  • 相关阅读:
    CentOS7上安装FTP服务
    CentOS7上安装Nginx、PHP、MySQL
    iOS-高性能编程之多线程
    Autoloader什么鬼
    PHP调用外部命令
    PHP使用Redis【重要】
    Windows系统上Redis的安装
    利用nginx与ffmpeg搭建流媒体服务器
    Ubuntu14.04上安装Composer
    find the most comfortable road(并差集,找差值最小的权值)
  • 原文地址:https://www.cnblogs.com/softidea/p/4273097.html
Copyright © 2011-2022 走看看