【发布时间】:2014-04-18 09:02:58
【问题描述】:
我在 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
我怎样才能实现它?
【问题讨论】:
-
好吧,你在
File对象上调用.getAbsolutePath(),这应该不会让你感到惊讶 -
但 list() 只返回文件夹名称,而不是路径。要访问它,我必须使用 rootFolder.getAbsolutePath()
-
如果你使用 Java 7,你可以使用
Path代替;它有更多的设施来做你想做的事。