我在c:\ Docs \ Desktop
下有以下文件结构rootFolder
|_x1
|_1.png
|_2.png
|_x2
我必须遍历rootFolder(x1,x2 ... xN)的子文件夹并创建保存它们的tar文件。所以x1.tar应该有1.png和2.png
for(String folder: rootFolder.list()) {
File files = new File(rootFolder.getAbsolutePath() + "\\" + folder);
for(File subfiles : files.listFiles()) {
fileList.add(subfiles);
}
generateTar(fileList,files.getAbsolutePath() + ".tar");
}
我在generateTar方法中使用org.apache.commons.compress.archivers
generateTarFile(List<File> fileList, String tarName) {
File tarFile = new File(tarName);
OutputStream out = new FileOutputStream(tarFile);
TarArchiveOutputStream aos = (TarArchiveOutputStream) new ArchiveStreamFactory().createArchiveOutputStream("tar", out);
for(File file : fileList) {
TarArchiveEntry entry = new TarArchiveEntry(file);
entry.setSize(file.length());
aos.putArchiveEntry(entry);
IOUtils.copy(new FileInputStream(file), aos);
aos.closeArchiveEntry();
}
aos.finish();
aos.close();
out.close();
}
此方法创建一个具有相同文件夹名称的tar文件(例如rootFolder下的x1.tar),但x1.tar具有以下结构
x1.tar
|_Docs
|_Desktop
|_rootFolder
|_x1
|_1.png
|_2.png
而不是
x1.tar
|_1.png
|_2.png
我怎样才能实现它?
答案 0 :(得分:0)
如果使用除文件之外还接受名称的TarArchiveEntry构造函数,则可以设置条目的名称。但这意味着您无法仅从文件列表生成tar:在您遍历目录树时,您需要以某种方式保存相对路径,或者在创建条目时计算相对路径。
答案 1 :(得分:0)
您可以在创建条目时使用文件名来实现此目的:
TarArchiveEntry entry = new TarArchiveEntry(file.getName());