我怎么能够tar
一个目录并使用以下命令保留目录结构org.apache.commons.compress
图书馆?
通过我在下面所做的事情,我只是得到一个所有东西都被压平的包裹。
Thanks!
这是我一直在尝试的方法,但它不起作用。
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.gz 文件中。
您需要将路径条目中的相对路径传递到此文件,而不是file.getName()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)