1
场景:使用Apache commons解压tar文件。使用apache commons从tar解压文件 - prob是重复条目
问题:我使用的tar是一个构建tar,它被部署到web服务器中。这个tar包含如下所示的重复条目。
- appender_class.xml
- APPENDER_CLASS.xml
使用下面的代码只appender_class.xml被提取,但我想这两个文件,我怎么能做到这一点解压时?在飞行重命名很好,但我怎么能做到这一点?
public static void untar(File[] files) throws Exception {
String path = files[0].toString();
File tarPath = new File(path);
TarEntry entry;
TarInputStream inputStream = null;
FileOutputStream outputStream = null;
try {
inputStream = new TarInputStream(new FileInputStream(tarPath));
while (null != (entry = inputStream.getNextEntry())) {
int bytesRead;
System.out.println("tarpath:" + tarPath.getName());
System.out.println("Entry:" + entry.getName());
String pathWithoutName = path.substring(0, path.indexOf(tarPath.getName()));
System.out.println("pathname:" + pathWithoutName);
if (entry.isDirectory()) {
File directory = new File(pathWithoutName + entry.getName());
directory.mkdir();
continue;
}
byte[] buffer = new byte[1024];
outputStream = new FileOutputStream(pathWithoutName + entry.getName());
while ((bytesRead = inputStream.read(buffer, 0, 1024)) > -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("Extracted " + entry.getName());
}
}
什么操作系统?只要您在区分大小写的文件系统上运行,该代码应该可以正常工作。 – 2013-03-11 22:09:31
是作为@mrhobo下面提到的我正在提取一个windows文件系统,其中tar是在UNIX文件系统中创建的。 – Wills 2013-03-12 06:01:14
在不区分大小写的系统上,不可能创建两个不同的文件,这两个文件的名称只有大小写不同,因此无法在典型的Windows FS上忠实地提取这样的tar,因此您必须重命名一个或另一个条目(这取决于tar文件的内容将用于确定这是否安全以及哪个可以更改)。 – 2013-03-12 08:44:53