失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 获取当前jar包的绝对路径

获取当前jar包的绝对路径

时间:2021-09-18 16:25:41

相关推荐

获取当前jar包的绝对路径

好久没来CSDN了诶嘿o(≧v≦)o

事情的起因是这样的,最近在编写的Java程序,想要在crontab下定时运行。

稍微了解Linux的人都知道,Linux的crontab下运行程序的话,路径是一个容易坑的问题。crontab内的程序运行的路径不是程序所在的路径,这就造成一个麻烦的地方,假如jar包的位置并不确定,而jar包又需要读取同目录的文件,那么我能想到的比较快速的修补办法有:

(1)在crontab下运行jar包的指令前面,添加进入jar包目录的语句

(2)写一个shell脚本,在运行jar包前添加:cd `dirname $0`

唔嗯……从高内聚低耦合的角度来说,这样的修补办法让人觉得有些不舒服。于是,有没有什么办法,能让jar包读取它自身所在的绝对路径呢?

以下就是jar包获取自身所在文件夹的绝对路径的代码:

String jarWholePath = MyClass.class.getProtectionDomain().getCodeSource().getLocation().getFile();try {jarWholePath = .URLDecoder.decode(jarWholePath, "UTF-8");} catch (UnsupportedEncodingException e) { System.out.println(e.toString()); }String jarPath = new File(jarWholePath).getParentFile().getAbsolutePath();

我来逐行解释一下这些内容吧:

第1行:

这一行获取了MyClass这个类所在的jar包的绝对路径。

举个例子来说,假如有一个名为MyClass的类,最后输出到了名为myJar.jar的jar包,该jar包现在放在C:\,那么这一行得到的内容就是:/C:/myJar.jar。

第2~4行:

这些行做了对jarWholePath这个String变量的转码。

如果路径完全是英语字符组成的,那么转码前后看起来是一样的;如果在路径中含有中文字符的话,那么这层转码就是必须的了,不转码就会让中文字符形成乱码。

第5行:

这一行获取了jar包所在的文件夹的绝对路径。

还是接着第1行的例子,这一行得到的结果是:C:/。

以上就是对这段小代码的解释。通过这段代码,我们就得到了jar包所在文件夹的位置,并且存储到了jarPath这个变量中。

写完之后还想讲两句闲话。

java的java.io.File类对文件操作和查看文件属性的功能还是比较完备的,一些常见的操作都可以直接调用函数。

像是这段小代码里最后一行,在通过new File(jarWholePath)得到一个File对象之后,对于文件的操作,包括获取绝对路径、获取上一级文件夹,等等,都可以任意调用函数。对于程序的快速开发,这是很好的帮助。

如果觉得《获取当前jar包的绝对路径》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。