public static void editJar(String file,String EntryName,byte[] data)
 {//修改jar
  try{
   JarFile jf = new JarFile(file);
   TreeMap tm = new TreeMap();
   Enumeration es = jf.entries();
   while(es.hasMoreElements())
   {
    JarEntry je = (JarEntry)es.nextElement();
    byte[] b = getByte(jf.getInputStream(je));
    tm.put(je.getName(),b);
   }
   JarOutputStream out = new JarOutputStream(new FileOutputStream(file));
   Set set = tm.entrySet();
   Iterator it = set.iterator();
   boolean has = false;
   while(it.hasNext())
   {
    Map.Entry me = (Map.Entry)it.next();
    String name = (String)me.getKey();
    JarEntry jeNew = new JarEntry(name);
    out.putNextEntry(jeNew);
    byte[] b;
    if(name.equals(EntryName))
    {
     b = data;
     has = true;
    }
    else
     b = (byte[])me.getValue();
    out.write(b,0,b.length);
   }
   if(!has)
   {
    JarEntry jeNew = new JarEntry(EntryName);
    out.putNextEntry(jeNew);
    out.write(data,0,data.length);
   }
   out.finish();
   out.close();
  }catch(Exception e){}
 }


配置文件和类文件一起打包到一个Jar中,如何读取/修改这个配置文件?
---------------------------------------------------------------

读取:
String currentJarPath = URLDecoder.decode(YourClassName.class.getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8"); //获取当前Jar文件名,并对其解码,防止出现中文乱码
JarFile currentJar = new JarFile(currentJarPath);
JarEntry dbEntry = currentJar.getJarEntry("包名/配置文件");
InputStream in = currentJar.getInputStream(dbEntry);
//以上YourClassName是class全名,也就是包括包名

修改:
JarOutputStream out = new FileOutputStream(currentJarPath);
out.putNextEntry(dbEntry);
out.write(byte[] b, int off, int len);  //写配置文件
。。。
out.close();