我使用以下代码尝试将一个目录及其所有子目录和文件打包到一个 jar 文件中。
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
...此代码失败,因为激活被添加到 jar 中两次。 由于这些是彼此嵌套的不同目录,我不明白为什么这在某种程度上不起作用。
似乎使用 file.getName() 添加条目将获得不包含的条目 ID 区分这些文件所在的目录。 但是当我使用
file.getAbsolutePath()
比如jar结构乱了 像“C_”这样的目录和包含的文件不再可读。
谁能推荐一种将目录结构正确打包到jar文件中的方法?
最佳答案
请注意 JarEntry
代表一个目录(文件夹)必须以斜杠(“/
”)结尾,以便被这样对待;否则它将被视为普通文件。
JarEntry dir = new JarEntry("activation/");
关于java - 如何使用 java.util.jar api 压缩/压缩整个目录结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8821615/