我试图通过使用apache commons压缩库来创建一个“有效的”tar.gz档案。创建的档案将由嵌入式设备读取,并且必须是相同的格式,我认为具有相同的文件权限。
如果我使用Linux创建我的文件,一切都很好,但如果我使用的是Windows。文件被拒绝。
如您所见,存档仅包含具有unix权限的特殊文件。这些设置正确,如果我使用一个“工作”的tar文件并通过gzip运行它,则创建的tar。gz也很好。
我发现的唯一区别是,不工作的tar文件稍大(61而不是56 kb),7zip显示在“主机操作系统”下FAT而不是Unix。
有什么想法,我可以如何从Windows创建一个“真正的”焦油档案?
提前致谢!
我目前的源代码是:
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
您需要使用不同的构造函数。我你检查爪哇代码塔档案入口
new TarArchiveEntry(file)
将最终进入new TarArchiveEntry(file,file.getPath())
因此,如果您使用<code>新的TarArchiveEntry(file,file.getName())
我有一个学校作业,要求我接受一个输入流,并使用apache commons压缩库将其压缩成一个字节数组,格式有5种(根据用户规范)。这5种格式是:ZIP、JAR、SEVENZ、BZIP2和gzip。我编写了以下方法以JAR格式压缩输入流,但得到了一个带有字符串“no current entry”的illegalStateException。
我读到关于Broli压缩,并认为我不妨考虑支持它。 我最近读到的一篇(ish)文章提到了一个.br文件——那么,在我的index.html文件旁边放一个index.br文件会很容易吗?或者支持它意味着重新编译Apache?
问题内容: 任何人都可以向我展示在我一直在搜索的Java中压缩和解压缩tar.gzip文件的正确方法,但是我能找到的最多是zip或gzip(单独)。 问题答案: 我最喜欢的是plexus-archiver-请参阅GitHub上的资源。 另一个选项是Apache commons- compress- (请参阅mvnrepository)。 使用plexus-utils,用于取消存档的代码如下所示:
我得到无效的zip,当写入文件以下代码: 我将其写入文件的方式是: 我做错了什么?
我正在为嵌套在其他一些面板中的面板使用垂直BoxLayout。其他面板的大小会导致目标面板中的对象以不美观的方式展开。如何让面板在没有太多填充的情况下从上到下呈现对象? 下面是类似的代码,尽管它产生了填充整个面板的微调器,而不是相距甚远的普通微调器。
我试图使用在Java()压缩文件,但不能解压文件后创建它。我使用下面的代码: 当我读取一个文件,并将其作为InputStream输入到此方法时,它会创建一个文件。 但是,当我尝试使用命令打开这个zip文件时,它无法打开,错误如下: 我尝试使用,它起作用并显示包含文本文件。这是因为命令不会在zip文件中查找中心目录签名的