用如下代码将工程目录中的res\test.jar复制到D:\Test下,发现System.out.println(entry.getName())没有输出“META-INFO/MANIFEST.MF”这项,在D:\Test\test.jar中,其它的JarEntry都复制过来了,就是少了"META-INFO"文件夹和该文件夹下的.MF文件。请问这是怎么回事呢??谢谢....
public static void jarCopy_JarEntry() {
try {
JarInputStream jarIn = new JarInputStream(new FileInputStream(
"res//test.jar"));
JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(
"D://Test//test.jar"));
byte[] buf = new byte[4096];
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println(entry.getName());
jarOut.putNextEntry(entry);
int read;
while ((read = jarIn.read(buf)) != -1) {
jarOut.write(buf, 0, read);
}
jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("OK");
}
public static void jarCopy_JarEntry() {
try {
JarInputStream jarIn = new JarInputStream(new FileInputStream(
"res//test.jar"));
JarOutputStream jarOut = new JarOutputStream(new FileOutputStream(
"D://Test//test.jar"));
byte[] buf = new byte[4096];
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println(entry.getName());
jarOut.putNextEntry(entry);
int read;
while ((read = jarIn.read(buf)) != -1) {
jarOut.write(buf, 0, read);
}
jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("OK");
}
try {
JarInputStream jarIn = new JarInputStream(new FileInputStream(
"D:\\jacob.jar"));
Manifest manifest = jarIn.getManifest();//manifest.......
JarOutputStream jarOut;
if(manifest != null) {
jarOut = new JarOutputStream(new FileOutputStream(
"D:\\jacob2.jar"),manifest);
}else {
jarOut = new JarOutputStream(new FileOutputStream(
"D:\\jacob2.jar"));
}
byte[] buf = new byte[4096];
JarEntry entry;
while ((entry = jarIn.getNextJarEntry()) != null) {
System.out.println(entry.getName());
jarOut.putNextEntry(entry);
int read;
while ((read = jarIn.read(buf)) != -1) {
jarOut.write(buf, 0, read);
}
jarOut.closeEntry();
}
jarOut.flush();
jarOut.close();
jarIn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("OK");
}
public JarOutputStream(OutputStream out)
throws IOException
Creates a new JarOutputStream with no manifest.
JarOutputStream
public JarOutputStream(OutputStream out,
Manifest man)
throws IOException
Creates a new JarOutputStream with the specified Manifest. The manifest is written as the first entry to the output stream.
明白了,谢谢...