生成可执行jar包和获得jar包同目录文件的方法

 

1、生成jar包命令:jar cvfm test.jar manifest.mf com
2、有依赖包时,请注意附件中标的空格,每个jar包一行且前后有空格,最后一行需回车。
3、获得jar包同目录文件的方法:

  
  
  
  
  1. public static String getAppPath(Class cls) {     
  2.     //检查用户传入的参数是否为空       
  3.     if (cls == null)     
  4.         throw new java.lang.IllegalArgumentException("参数不能为空!");     
  5.     ClassLoader loader = cls.getClassLoader();     
  6.     //获得类的全名,包括包名       
  7.     String clsName = cls.getName() + ".class";     
  8.     //获得传入参数所在的包       
  9.     Package pack = cls.getPackage();     
  10.     String path = "";     
  11.     //如果不是匿名包,将包名转化为路径       
  12.     if (pack != null) {     
  13.         String packName = pack.getName();     
  14.         //此处简单判定是否是Java基础类库,防止用户传入JDK内置的类库       
  15.         if (packName.startsWith("java.") || packName.startsWith("javax."))     
  16.             throw new java.lang.IllegalArgumentException("不要传送系统类!");     
  17.         //在类的名称中,去掉包名的部分,获得类的文件名       
  18.         clsName = clsName.substring(packName.length() + 1);     
  19.         //判定包名是否是简单包名,如果是,则直接将包名转换为路径,       
  20.         if (packName.indexOf(".") < 0)     
  21.             path = packName + "/";     
  22.         else {//否则按照包名的组成部分,将包名转换为路径       
  23.             int start = 0, end = 0;     
  24.             end = packName.indexOf(".");     
  25.             while (end != -1) {     
  26.                 path = path + packName.substring(start, end) + "/";     
  27.                 start = end + 1;     
  28.                 end = packName.indexOf(".", start);     
  29.             }     
  30.             path = path + packName.substring(start) + "/";     
  31.         }     
  32.     }     
  33.     //调用ClassLoader的getResource方法,传入包含路径信息的类文件名       
  34.     java.net.URL url = loader.getResource(path + clsName);     
  35.     //从URL对象中获取路径信息       
  36.     String realPath = url.getPath();     
  37.     //去掉路径信息中的协议名"file:"       
  38.     int pos = realPath.indexOf("file:");     
  39.     if (pos > -1)     
  40.         realPath = realPath.substring(pos + 5);     
  41.     //去掉路径信息最后包含类文件信息的部分,得到类所在的路径       
  42.     pos = realPath.indexOf(path + clsName);     
  43.     realPath = realPath.substring(0, pos - 1);     
  44.     //如果类文件被打包到JAR等文件中时,去掉对应的JAR等打包文件名     
  45.     if (realPath.endsWith("!"))     
  46.         realPath = realPath.substring(0, realPath.lastIndexOf("/"));     
  47.     /*------------------------------------------------------------     
  48.      ClassLoader的getResource方法使用了utf-8对路径信息进行了编码,当路径     
  49.       中存在中文和空格时,他会对这些字符进行转换,这样,得到的往往不是我们想要     
  50.       的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的     
  51.       中文及空格路径     
  52.     -------------------------------------------------------------*/    
  53.     try {     
  54.         realPath = java.net.URLDecoder.decode(realPath, "utf-8");     
  55.     }     
  56.     catch (Exception e) {     
  57.         throw new RuntimeException(e);     
  58.     }     
  59.     return realPath;     
  60. }    

 

 

 

你可能感兴趣的:(jar,jar文件目录)