使用下面的代码尝试将包含其所有子目录和文件的目录打包到一个jar文件中。如何将jar/zip整个目录结构与java.util.jar api?
private void writeFile(JarOutputStream jos, File f) throws IOException {
byte buffer[] = new byte[BUFFER_SIZE];
if (f == null || !f.exists())
return; //
JarEntry jarAdd = new JarEntry(f.getName());
jarAdd.setTime(f.lastModified());
jos.putNextEntry(jarAdd);
if(f.isDirectory()){
File[] files = f.listFiles();
for(int i = 0; i < files.length ; i++){
writeFile(jos,files[i]);
}
}
else{
FileInputStream in = new FileInputStream(f);
while (true) {
int nRead = in.read(buffer, 0, buffer.length);
if (nRead <= 0)
break;
jos.write(buffer, 0, nRead);
}
in.close();
}
}
但FileInputStream不能在目录上工作,所以我假设添加JarEntry就足够了。
由于我确实有另一个问题,我无法看到这个假设是否正确。 此问题是许多条目是重复的。
当尝试添加结构...
activation
/--activation
/-- somefile.txt
...此代码失败,因为激活被添加到两次的罐子。 由于这些是不同的目录嵌套在对方,我不明白为什么这不应该以某种方式工作。
看来,增加使用file.getName()将获得入门IDS是做目录这些文件之间不 区分条目。 然而,当我使用
file.getAbsolutePath()
例如, jar结构与 目录(如“C_”)混乱,并且包含的文件不再可读。
任何人都可以推荐一种方法来正确打包jar文件中的目录结构吗?
看看我做的课程:http://all-inhonmodman.svn.sourceforge.net/viewvc/all-inhonmodman/ModManager/src/modmanager/utility/ZIP.java?revision=292&content-type=文本%2Fplain它有你需要的所有方法。 – SHiRKiT 2012-01-11 15:17:12