好久没来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 = java.net.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包的绝对路径相关推荐

  1. SpringBoot打成Jar包运行,获取运行Jar包的目录

    SpringBoot获取运行Jar包的目录 // linux和windows下通用 private String getJarFilePath() {ApplicationHome home = ne ...

  2. R语言libPaths函数获取或者设置包安装的路径实战

    R语言libPaths函数获取或者设置包安装的路径实战 目录 R语言libPaths函数获取或者设置包安装的路径实战 #.libP

  3. 取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径

    经过试验,不管是否是Jar包,不管是否是Tomcat部署,以下三个方法均可实现. package test; public class MyPath { public static String ge ...

  4. JAVA获取程序/jar包所在路径

    public class path{public static void main(String []args){//输出本程序/jar包所在路径System.out.println(System.g ...

  5. 获得jar包存放路径的方法

    获得jar包存放路径的方法 Posted by zeal on 2006-07-11 09:45 , 1371 characters |  + 0 - 0   English 转载请保留本行原始出处声 ...

  6. jar包与war包部署的区别及jar包部署的一个路径访问问题

    1.jar包与war包部署的区别 什么是jar包? jar包是类的归档文件,jar文件格式以流行的ZIP文件格式作为基础,和ZIP文件不一样的是,JAR文件不仅仅用来进行压缩和发布,还用来部署和封装库 ...

  7. java jar包的路径

    用java些的脚本,然后打成jar包运行,jar包里的程序需要读配置文件的一些参数,所以需要确定读配置文件的路径.一般配置文件和jar包放置在同一目录下,这个时候就需要jar包里的代码,取到jar包存 ...

  8. [Maven] 无法获取私服最新Jar包的问题

    文章目录 一.私服无法获取最新jar包? 1.1 pom配置 1.2 修改mvn编译命令 1.3 修改版本号 一.私服无法获取最新jar包? 更新了某个工具包到私服之后,编译时却还是获取不到最新的ja ...

  9. 上传jar包到私服(仅限于翼支付公司工作流程使用)和涉及的技术总结

    做这件事情的方向:先修改后提升版本--->上传到私服 ---->项目中使用该jar包 1修改 BankPay.java类  在 gateway-bank-api中 2提升版本 修改gate ...

最新文章

  1. Pjax是什么以及为什么推荐大家用
  2. R假设检验之Shapiro检验(正太分布判断)
  3. 轨道阱 matlab,赛默飞四极杆-轨道阱液质联用仪核心参数详解
  4. python官网下载哪个版本-python下载哪个版本好
  5. Algorithms_二叉树二分搜索树初探
  6. Redis笔记(六):Java中使用Redis
  7. MySQLdb的安装
  8. 如果你也会C#,那不妨了解下F#(6):面向对象编程之“类”
  9. 安装以太坊客户端geth的方法
  10. Java Web开发之一:用好的技术设计来犒赏自己
  11. SPSS实现重复测量方差分析
  12. win10装kali linux双系统,win10安装kali组成双系统攻略
  13. oracle的number类型
  14. 给body设置背景图片,整个图片完整的充满屏幕
  15. Google的恶搞新闻联播
  16. Windows CMD DOS命令
  17. 2022年博士招生 | 华南理工大学-鹏城实验室 联培博士 专项计划
  18. 华为云服务器安装Linux并实现本地连接访问
  19. [跑步] 7种方法增强耐力
  20. SQL Server 2019 开启数据库远程访问

热门文章

  1. 以下哪一个不属于python语言的特点-【单选题】下面的4个特点,Python不具备的是?...
  2. 关于TDOA算法的仿真及比较
  3. 热血物语怎么过关,怎么通关,为什么无法通关
  4. IBM Rational Functional Tester用户手册(一)
  5. C# 练习ListBox控件用法。
  6. HA存储HP 3PAR 7200c
  7. 疯狂的大柚柚带你玩转MSP-ESP430G2(基础篇) -----(四)ESP430G2 低功耗模式
  8. JDK API 版本6、7、8、9汉化文档及部分英文文档CHM一起分享
  9. JavaScript脚本延迟加载的方式有哪些?
  10. phpstudy安装sg11组件_宝塔面板一键安装配置SG11加密组件教程