`
kinganpo
  • 浏览: 50929 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

动态获取打包Jar后的路径信息

    博客分类:
  • java
阅读更多
做了几个小软件需要用到打包后jar的路径,找了些日子终于到了可行方法...
下面专门封装了一个类来处理:
import java.io.File;
/**
 * 获取打包后jar的路径信息
 * @author Administrator
 *	2011-01-16 13:53:12
 */
public class JarTool {
	//获取jar绝对路径
	public static String getJarPath(){
		File file = getFile();
		if(file==null)return null;
		 return file.getAbsolutePath();
	}
	//获取jar目录
	public static String getJarDir() {
		File file = getFile();
		if(file==null)return null;
	     return getFile().getParent();
	}
	//获取jar包名
	public static String getJarName() {
		File file = getFile();
		if(file==null)return null;
		return getFile().getName();
	}

	private static File getFile() {
		//关键是这行...
		String path = JarTool.class.getProtectionDomain().getCodeSource()
				.getLocation().getFile();
        try{
            path = java.net.URLDecoder.decode(path, "UTF-8");//转换处理中文及空格
        }catch (java.io.UnsupportedEncodingException e){
            return null;
        }
		return new File(path);
	}
	
}

必须要打包成jar后才能正确获取相关路径信息,下面写了个测试类:
import javax.swing.JFrame;
import javax.swing.JTextArea;

public class TestFrame extends JFrame{
	public TestFrame() {
		JTextArea ta = new JTextArea();
		ta.setEditable(false);
		ta.append("name: "+JarTool.getJarName()+"\n");
		ta.append("dir: "+JarTool.getJarDir()+"\n");
		ta.append("path: "+JarTool.getJarPath()+"\n");
		add(ta);
		pack();
		setTitle("动态获取Jar路径信息");
		setVisible(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new TestFrame();
	}
}

将上面一起打包成path.jar后放到桌面运行结果:

无论path.jar放到任何地方都能得到正确的路径信息 (*^__^*) 嘻嘻……
主要靠下面两行代码实现
class.getProtectionDomain().getCodeSource().getLocation().getFile();这行作用是获取当前的绝对路径信息
java.net.URLDecoder.decode(path, "UTF-8");此行是将path中的空格和中文“乱码”转换正确回显
对此可以为自己做的软件“注册”随系统开机启动了...
  • 大小: 9.4 KB
16
6
分享到:
评论
5 楼 人生难得糊涂 2014-07-29  
感谢!!
4 楼 baochunyu 2011-02-11  
以前也碰到过这种问题,看后自己囧个
3 楼 kinganpo 2011-01-27  
fan2012 写道
你的关键代码改为
String path = JarTool.class.getResource("/").getFile();
也可以

打包jar后能否正确获取路径呢?
2 楼 fan2012 2011-01-27  
你的关键代码改为
String path = JarTool.class.getResource("/").getFile();
也可以
1 楼 raveh 2011-01-25  
**收**藏**

相关推荐

    解决java打包之后无法加载静态资源的问题SWTResourceManager.java源码

    利用swt中的一个获取图片的类...打成jar包后,获取图片的路径中有"xxx.jar!"这里面的内容是不能够被操作系统识别出来的,因此直接通过路径来获取文件是不可能,使用SWTResourceManager可实现这一功能。

    springboot项目打成jar包后无法获取static下的静态资源文件的问题分析

    主要介绍了springboot项目打成jar包后无法获取static下的静态资源文件的问题分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    工具类的jar包

    自己写的一些工具类的打包 主要是文件操作 文件夹路径获取 xml文件操作 json对象转换

    在线支付模块

    (2)第1个实例需要将从支付宝获取的接口API打包成jar文件,打包后的目录如图所1.1示,然后将该jar文件与jsf-api.jar、jsf-impl、jstl-1.2.jar以及SQL Server 2000数据库驱动包(mssqlserver.jar、msutil.jar、...

    构建一个Java应用的Docker镜像

    构建一个Java应用的Docker镜像 ...在jar包同一路径下创建文件,命名为:Dockerfile,内容是: # FROM --- 获取基础镜像base image # RUN --- 类似于执行 linux指令 # COPY --- 类似于linux copy指令 # EXPOSE ---

    x5内核静态打包方案43500-43656.zip

    进入界面后点击拷贝内核按钮,会弹出保存的路径(参考顶上【图3】),打开这个路径后提取里面的core_private/x5.debug.tbs这个文件,其实这个是一个apk/zip文件,30多M,解压后得到一堆so和jar等文件,先复制出来...

    一个用JAVA Applet做的批量上传客户端

    客户端会将文件分卷POST到服务端,服务端需要接收这部分文件并保存为临时文件;分卷上传结束后客户端将调用服务端将临时文件拼接。请自行修改源码中的路径使...class文件需要打包为jar并签名,否则无法获取本地文件内容

    java po 转换 c# po

    1.详细配置,请参见control/config.ini文件 ...该工具使用Java 反射制作,所以请将要转换的jar的所有依赖文件全部打包到一个jar文件中,否则转换有可能失败 如要获取源码,请联系bliplink@gmail.com

    宙斯

    强大的宙斯 特征 将学生项目打包到.jar存档中 使用Checkstyle检查代码样式 ...所有命令都有自己的帮助菜单,使用-h键可获取更多信息! 运行宙斯 java --enable-preview -jar <ZEUS> 用键运行宙斯 java --enab

    Java版水果管理系统源码-FuckHamSports:WHU-汉姆-阳光体育代跑图形界面工具-环境打包-即开即用

    ​ 选择对应版本的jar下载获取 网盘备份: Attention: Bug fixed 0.1.4-0.1.5版本模拟Hibernate模式存在严重错误,无法正确运行,现在网盘镜像中的v0.1.5和压缩打包项目已经修复,不再提供0.1.4版本下载,请...

    CertificateDownloader:Java 微信支付 APIv3 平台证书的命令行下载工具

    该工具已经通过 Maven 打包成 CertificateDownloader.jar,可在 中下载。 执行 java -jar CertificateDownloader.jar -h ,查看帮助: 这里,必需参数有: 商户的私钥文件,即 -f 证书解密的密钥,即 -k 商户号,即 ...

    java动态日志注入工具anylog.zip

     4、执行mvn install打包,在dist下会生成你的扩展实现jar。  5、把扩展实现jar拷贝到anylog的providers目录下,重启即可生效。  tips:在实现spi时,我们提供了SpiDesc注解,该注解作用在你实现的...

    Springboot项目打war包docker包找不到resource下静态资源的解决方案

    今天小编就为大家分享一篇关于Springboot项目打war包docker包找不到resource下静态资源的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    网狐荣耀版开发使用常见问题解答

    用户信息导入后,就可以用机器人工具进行房间的机器人分配了。 九、eclipse加载荣耀版时红叉an outline is not available报错的处理 很多时候这些错误不是程序问题造成,而是环境问题造成。这个主要是第三方的类库...

    spark-kernel:使用 Scala 实现 IPython 内核 (3.0) 并为 Apache Spark 提供特定支持

    此外,该项目旨在为 IPython 等场景提供发送打包 jar(标准作业)和代码片段(具有修订功能)的能力,以进行动态更新。 最后,内核编写了未来计划,以允许多个应用程序连接到单个内核以利用相同的 Spark 上下文。 ...

    spring-boot-example:Spring Boot中的示例项目

    键入java -jar target/spring-boot-example-1.0-SNAPSHOT.jar来运行打包的应用程序。 个人资料 设置jvm属性-Dspring.profiles.active=prod以使用application-prod.properties 路径 检查ExampleController类以获取受...

    Java项目开发与毕业设计指导

    如果不能运行,将ch07文件夹下的swt.jar加入构建路径,然后在运行中的JVM参数中加入-Djava.library.path="dll所在目录的绝对路径"即可。 也可以在命令行下直接运行该程序,假设ch07文件夹放在D盘跟目录。则在cmd下...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    和上面配置是一样的道理,可以在相同 一级域名 下的所有域名都可以获取到登录的信息。 四、简单实现了单个帐号只能在一处登录。 我们在其他的系统中可以看到,单个帐号只允许一人使用,在A处登录了,B处再登录,那A...

    jsp servlet 入门学习资料-新手一看就懂

    10.4.5 打包生成JAR文件 10.5 EJB的部署—J2SDKEE 10.5.1 使用deploytool打包EJB 10.5.2 使用deploytol部署EJB 10.6 EJB的部署—BEA WebLogic 10.6.1 生成可部署的ejb-jar包 10.6.2 部署WbLogic的ejb-jar包 ...

Global site tag (gtag.js) - Google Analytics