gpt4 book ai didi

java - 在 java 中使用 Apache 保存目录结构

转载 作者:搜寻专家 更新时间:2023-11-01 03:04:58 25 4
gpt4 key购买 nike

如何使用 org.apache.commons.compresstar 目录并保留目录结构?

通过我在下面所做的,我得到了一个所有东西都被压平的包裹。

谢谢!


这是我一直在尝试的方法,但没有用。

public static void createTar(final String tarName, final List<File> pathEntries) throws IOException {
OutputStream tarOutput = new FileOutputStream(new File(tarName));

ArchiveOutputStream tarArchive = new TarArchiveOutputStream(tarOutput);

List<File> files = new ArrayList<File>();

for (File file : pathEntries) {
files.addAll(recurseDirectory(file));
}

for (File file : files) {

TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(file, file.getName());
tarArchiveEntry.setSize(file.length());
tarArchive.putArchiveEntry(tarArchiveEntry);
FileInputStream fileInputStream = new FileInputStream(file);
IOUtils.copy(fileInputStream, tarArchive);
fileInputStream.close();
tarArchive.closeArchiveEntry();
}

tarArchive.finish();
tarOutput.close();
}

public static List<File> recurseDirectory(final File directory) {

List<File> files = new ArrayList<File>();

if (directory != null && directory.isDirectory()) {

for (File file : directory.listFiles()) {

if (file.isDirectory()) {
files.addAll(recurseDirectory(file));
} else {
files.add(file);
}
}
}

return files;
}

最佳答案

你的问题在这里:

TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(file, file.getName());

因为你把每个文件放在 tar 中,只有它的名字,而不是他的路径。

您需要将路径条目中的相对路径传递给此文件,而不是 file.getName()

关于java - 在 java 中使用 Apache 保存目录结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25750509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com