今天试了一个程序,就是在代码中对文件夹下面的文件(包结构,含class文件)打成jar包,跟我用手动进行打包后内容解压后是一模一样,就是jar包的大小不一样,但是在程序运行时能够加载到我手动打包的b.jar包下的xx.class文件,但是我用代码打包的b.jar却加载不到,说can not find。不知道是什么原因,大家有遇到过吗,真心求教,谢谢。这是我的代码:/**
* 功能:文件夹的压缩打包(jar)
*
* @param inputFileName
* 被压缩或者打包的文件夹 outputFileName 压缩后或者打包的文件
*/
public static void jar(String inputFileName, String outputFileName)
throws Exception {
JarOutputStream out = new JarOutputStream(new FileOutputStream(
outputFileName));
jar(out, new File(inputFileName), "");
out.close();
} private static void jar(JarOutputStream out, File f, String base)
throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base.length() == 0 ? "" : base + "\\"; for (int i = 0; i < fl.length; i++) {
jar(out, fl[i], base + fl[i].getName());
} } else {
// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
out.putNextEntry(new JarEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[1024];
int n = in.read(buffer);
while (n != -1) {
out.write(buffer, 0, n);
n = in.read(buffer);
}
in.close();
}
} public static void main(String[] args) {
try {
jar("G://kaka", "G://b.jar");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}文件结构是kaka/
com/jtang/component/a.class
b.class
META-INF/MANIFEST.MF
* 功能:文件夹的压缩打包(jar)
*
* @param inputFileName
* 被压缩或者打包的文件夹 outputFileName 压缩后或者打包的文件
*/
public static void jar(String inputFileName, String outputFileName)
throws Exception {
JarOutputStream out = new JarOutputStream(new FileOutputStream(
outputFileName));
jar(out, new File(inputFileName), "");
out.close();
} private static void jar(JarOutputStream out, File f, String base)
throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base.length() == 0 ? "" : base + "\\"; for (int i = 0; i < fl.length; i++) {
jar(out, fl[i], base + fl[i].getName());
} } else {
// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
out.putNextEntry(new JarEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[1024];
int n = in.read(buffer);
while (n != -1) {
out.write(buffer, 0, n);
n = in.read(buffer);
}
in.close();
}
} public static void main(String[] args) {
try {
jar("G://kaka", "G://b.jar");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}文件结构是kaka/
com/jtang/component/a.class
b.class
META-INF/MANIFEST.MF
jar包应该是
[code=INIFile]com/jtang/component/a.class
b.class
META-INF/MANIFEST.MF [/code]没有那个kaka才对,代码如下import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;class Test { public static void jar(String inputFileName, String outputFileName) throws Exception {
JarOutputStream out = new JarOutputStream(new FileOutputStream(outputFileName));
File f = new File(inputFileName);
File[] fl = f.listFiles(); // 这里应该以那个目录为根目录,jar的根应该是这个目录下的文件 for (int i = 0; i < fl.length; i++) {
jar(out, fl[i], "");
} out.close();
} private static void jar(JarOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base.length() == 0 ? "" : base + "\\"; for (int i = 0; i < fl.length; i++) {
jar(out, fl[i], base + fl[i].getName());
} } else {
// out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
out.putNextEntry(new JarEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[1024];
int n = in.read(buffer);
while (n != -1) {
out.write(buffer, 0, n);
n = in.read(buffer);
}
in.close();
}
} public static void main(String[] args) {
try {
jar("d://temp//ooola", "d://ooola.jar");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.jar.JarEntry;
import java.util.jar.JarOutputStream;public class Test {
public static void jar(String inputFileName, String outputFileName) throws Exception {
JarOutputStream out = new JarOutputStream(new FileOutputStream(outputFileName));
File f = new File(inputFileName);
jar(out, f, "");
out.close();
} private static void jar(JarOutputStream out, File f, String base) throws Exception {
if (f.isDirectory()) {
File[] fl = f.listFiles();
base = base.length() == 0 ? "" : base + "/";
for (int i = 0; i < fl.length; i++) {
jar(out, fl[i], base + fl[i].getName());
}
} else {
out.putNextEntry(new JarEntry(base));
FileInputStream in = new FileInputStream(f);
byte[] buffer = new byte[1024];
int n = in.read(buffer);
while (n != -1) {
out.write(buffer, 0, n);
n = in.read(buffer);
}
in.close();
}
} public static void main(String[] args) {
try {
jar("e:\\workplace\\test", "d://test.jar");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}