首页 > 编程语言 >获取当前jar包路径_java获取jar文件

获取当前jar包路径_java获取jar文件

时间:2023-03-08 18:12:43浏览次数:39  
标签:java filePath jar System class 获取 目录

一、获取可执行jar包所在目录

(1)方法一:使用

System.getProperty("java.class.path")

复制

获取classpath的路径,若没有其他依赖,在cmd下运行该可执行jar包,则该值即为该jar包的绝对路径。代码如下:

/** * 方法一:获取当前可执行jar包所在目录 */
String filePath = System.getProperty("java.class.path");
String pathSplit = System.getProperty("path.separator");//得到当前操作系统的分隔符,windows下是";",linux下是":"

/** * 若没有其他依赖,则filePath的结果应当是该可运行jar包的绝对路径, * 此时我们只需要经过字符串解析,便可得到jar所在目录 */
if(filePath.contains(pathSplit)){
    filePath = filePath.substring(0,filePath.indexOf(pathSplit));
}else if (filePath.endsWith(".jar")) {
  
  //截取路径中的jar包名,可执行jar包运行的结果里包含".jar"
    filePath = filePath.substring(0, filePath.lastIndexOf(File.separator) + 1);
}
System.out.println("jar包所在目录:"+filePath);

复制

(2)方法二:使用

ClassName.class.getProtectionDomain().getCodeSource().getLocation().getPath()

复制

但是这种方法不支持中文,需要使用以下代码方法,进行转换

/** * 方法二:获取当前可执行jar包所在目录 */
URL url = JarTest.class.getProtectionDomain().getCodeSource().getLocation();
try {
    filePath = URLDecoder.decode(url.getPath(), "utf-8");// 转化为utf-8编码,支持中文
} catch (Exception e) {
    e.printStackTrace();
}
if (filePath.endsWith(".jar")) {
  
  // 可执行jar包运行的结果里包含".jar"
    // 获取jar包所在目录
    filePath = filePath.substring(0, filePath.lastIndexOf("/") + 1);
}

File file = new File(filePath);
filePath = file.getAbsolutePath();//得到windows下的正确路径
System.out.println("jar包所在目录:"+filePath);

复制

二、获取当前JVM运行目录

使用:

System.getProperty("user.dir")

复制

三、获取jar包内的资源文件

文件与classes在同一目录下,或者使用maven构建时,文件存在于resources文件夹下,可以使用: getResourceAsStream 代码如下:

/** * 读取jar包中的资源文件 */
InputStream is = JarTest.class.getResourceAsStream("/test.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String s="";
try {
    while((s=br.readLine())!=null)
        System.out.println(s);
} catch (IOException e) {
    e.printStackTrace();
}

标签:java,filePath,jar,System,class,获取,目录
From: https://www.cnblogs.com/little-monster-lhq/p/17195631.html

相关文章

  • Java多种方法实现等待所有子线程完成再继续执行
    简介在现实世界中,我们常常需要等待其它任务完成,才能继续执行下一步。Java实现等待子线程完成再继续执行的方式很多。我们来一一查看一下。Thread的join方法该方法是Thre......
  • nginx odoo 多层代理获取真实IP
    https://juejin.cn/post/7067104289520353310网络架构:pc->14.23:7050(nginx)->14.22:8081(nginx)->14.22:8080(web服务)23nginx配置:server{ listen7050;......
  • java springboot mybatis plus 3.4 实现执行任意 sql 语句
    试了SqlRunner一直失败,不知道原因,于是试了如下方法,完美解决。@AutowiredprivateSqlSessionFactorysqlSessionFactory;publicList<Map<String,Object>>exec......
  • 【JavaScript】38_对象的序列化----JSON
    3、对象的序列化对象的序列化JS中的对象使用时都是存在于计算机的内存中的序列化指将对象转换为一个可以存储的格式在JS中对象的序列化通常是一个对象转换为字符串(JSON字......
  • java动态代理
    1️⃣首先创建需要的接口以及对应实现类来测试代理模式(动态代理)      2️⃣创建动态代理类,去帮我代理一些接口   3️⃣创建一个获取代理对象的工厂 ......
  • java HashMap集合练习之键是String值是Student
           ......
  • java 列表查询
    最常用的便是for循环查询:for(StudentRecordrecord:records){if(record.getYear()==yearSearch){System.out.println(record.getId()+""+record.g......
  • java 学生管理系统(案例)25
      packagecom.demo.studer;publicclassstu{privateStringid;privateStringname;privateintage;privateStringbirthday;pub......
  • Qt获取ip和mac地址
    准确获取mac地址QStringMainWindow::getHostMacAddress(){QList<QNetworkInterface>nets=QNetworkInterface::allInterfaces();//获取所有网络接口列表......
  • java代码审计-SSRF
    0x00前言SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图......