【问题标题】:How do i create a "valid" unix TAR Archive in Windows with Java (apache compress)?如何使用 Java(apache 压缩)在 Windows 中创建“有效”的 unix TAR 存档?
【发布时间】:2013-07-01 14:36:04
【问题描述】:

我正在尝试使用 apache commons compress 库创建一个“有效”的 tar.gz 存档。创建的存档将由嵌入式设备读取,并且我认为必须具有相同的格式和相同的文件权限。

如果我使用 Linux 创建文件,一切正常,但如果我使用 Windows。文件被拒绝。

如您所见,存档仅包含具有 unix 权限的特殊文件。这些设置正确,如果我使用“工作”tar 文件并通过 gzip 运行它,则创建的 tar.gz 也可以正常工作。

我发现的唯一区别是,非工作 tar 文件稍大(61 而不是 56 kb)并且 7zip 显示在“主机操作系统”FAT 而不是 Unix .

任何想法,我如何从 Windows 创建一个“真正的”tar 存档?

提前致谢!

我目前的源码是:

public static void compress(File configTar, File rcConf, File databaseTxt)
        throws ArchiveException, IOException {

    OutputStream tarFileStream = new GZIPOutputStream(new FileOutputStream(configTar));
    InputStream rcConfStream = new FileInputStream(rcConf);
    InputStream databaseTxtStream = new FileInputStream(databaseTxt);

    ArchiveOutputStream archiveOutputStream = new ArchiveStreamFactory()
            .createArchiveOutputStream(ArchiveStreamFactory.TAR, tarFileStream);

    TarArchiveEntry databaseTxtEntry = new TarArchiveEntry(databaseTxt);
    TarArchiveEntry rcConfEntry = new TarArchiveEntry(rcConf);

    databaseTxtEntry.setName("database.txt");
    databaseTxtEntry.setGroupName("root");
    databaseTxtEntry.setUserName("root");
    databaseTxtEntry.setMode(convertModeFromString("rwxr-xr-x"));

    archiveOutputStream.putArchiveEntry(databaseTxtEntry);
    IOUtils.copy(databaseTxtStream, archiveOutputStream);
    archiveOutputStream.closeArchiveEntry();

    rcConfEntry.setName("rc.conf");
    rcConfEntry.setGroupName("root");
    rcConfEntry.setUserName("root");
    rcConfEntry.setMode(convertModeFromString("rw-rw-rw-"));

    archiveOutputStream.putArchiveEntry(rcConfEntry);
    IOUtils.copy(rcConfStream, archiveOutputStream);
    archiveOutputStream.closeArchiveEntry();

    archiveOutputStream.finish();

    rcConfStream.close();
    databaseTxtStream.close();
    tarFileStream.close();
}

我进行了一些研究,发现 TAR 标头之间存在差异。谁能告诉我,我做错了什么?

Working example of file 1:
   http://i.stack.imgur.com/S8Rbi.jpg

NON-Working example of file 1:
   http://i.stack.imgur.com/bdc9T.jpg

Working example of file 2:
   http://i.stack.imgur.com/rYhr9.jpg

NON-Working example of file 2:
   http://i.stack.imgur.com/4wHw3.jpg

【问题讨论】:

    标签: gzip file-permissions apache-commons tar apache-commons-compress


    【解决方案1】:

    您需要使用不同的构造函数。我你检查JavaCodeTarArchiveEntry

    new TarArchiveEntry(file) 最终会变成new TarArchiveEntry(file, file.getPath())

    所以,如果你使用new TarArchiveEntry(file, file.getName()),它会变平

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-15
      • 2014-10-08
      • 2011-01-03
      • 2010-12-02
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-23
      相关资源
      最近更新 更多