如何使用org.apache.commons.compress
库创建目录并保留目录结构?
有了我在下面所做的,我只是得到了一个包,有一切扁平。
谢谢!
这是我一直在尝试的,但没有效果。
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;
}
2条答案
按热度按时间wgmfuz8q1#
你的问题就在这里:
因为您在tar中只使用文件名而不是路径来放置每个文件。
您需要将路径条目中的相对路径而不是
file.getName()
传递到此文件。7gs2gvoe2#
如果你使用的是文件的完整目录路径,那么这个库的字符限制是100个字符。你需要修改TarArchiveOutputStream来获得更长的路径。这样就可以了。