Java获取Jar、War包路径,并生成可编辑修改的本地配置文件

这篇具有很好参考价值的文章主要介绍了Java获取Jar、War包路径,并生成可编辑修改的本地配置文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本地的可修改配置文件的编写理应是一个很常用的功能,但由于数据库的存在,它鲜少被提及,大多数我们直接存储到数据库中了。

以至于现今,除了没接触数据库的新手时常使用它以外,它没有太多的出场机会。
也因此,其实很多人不太了解其中的存储机制以及可能存在的一些坑。

不过也有适合用本地配置的时候,例如我遇到了一个场景,需要保存一个邮箱格式,这个格式当然不会经常变化,因而存储到数据库不太方便,尤其我用的是关系型数据库MYSQL,存起来感觉很别扭。如果存到Redis中,一旦服务宕机,数据就会消失,虽然并不是很重要的数据,但也不是很好的解决方案。

分析

要了解如何生成一个本地的可编辑配置文件,首先就得想清楚文件应该放在哪?

新手可能会直接回答,这还不简单,直接跟代码一样放classes目录下不就得了。

答案显然是不行的,因为jar包本质上是一个压缩包,如果你放在IDE中直接运行,那么不会有任何问题,但是一旦你需要打jar包或者war包。你就无法动态的去修改Jar包中的内容,这点很容易理解。

所以,比较科学的方法,就是在Jar/War包的同级目录下,新建一个配置文件。

1.获取Jar包同级目录

方法一、Protection Domain

如何获取Jar包的同级目录,可以使用jdk提供的Protection Domain
以下代码可以得到当前代码源的位置,简单来说,就是编译生成的classes目录。

File file=new File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());

但是要得到想要的Jar包路径还没有那么简单,因为这里有一个坑,在IDE中直接运行和打成Jar包后运行的效果是不同的。

例如以下的这段演示代码:

String name = new String("history.json");
File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
System.out.println(file.toString());
String jarPath = file.getParentFile().getParent();//jar所在文件夹路径
System.out.println("jarPath: " + jarPath);
String resource = jarPath + File.separator +name;
System.out.println(resource);

(1)IDE中

如何获取jar包运行同级目录,编程经验,java,jar,开发语言,配置,文件,路径

(2)windows下运行Jar

如何获取jar包运行同级目录,编程经验,java,jar,开发语言,配置,文件,路径

(3)Linux下运行Jar

如何获取jar包运行同级目录,编程经验,java,jar,开发语言,配置,文件,路径

方法一路径问题总结

由此,我们得出一个结论,上述获取jar包路径的代码,在IDE中运行的效果和打包后运行效果不同,且打包后Windows和Linux运行效果基本一致。

我们想要的Jar文件夹路径,需要向上获取三次父目录,正确的在打包后获取Jar包路径的代码应该如下:
resource即我们需要的配置文件路径,使用File.seperator是为了不同平台的适配性。

String name = new String("history.json");
File file=new File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
File jarPath = file.getParentFile().getParentFile().getParentFile();//jar所在文件夹路径
String resource = jarPath.getPath().replace("file:","") + File.separator +name;

方法二(推荐)

Java的系统变量里给我们提供了很多方便的配置,例如user.dir可以直接获取到当前的工作目录,而且通过这种方式不管是在IDE还是部署时,得到的结果都是一致的,不会出现不同层级的情况。

//get the config file path
String jarPath = System.getProperty("user.dir");
String resourcePath = jarPath + File.separator + appConfig.getFileName();

2.读取与修改配置文件

有了对应的配置文件路径,那么就很轻松了。

考虑到配置文件一般是Properties或Yaml格式,这里以Java本身支持的Properties为例。

使用字符流读取较为方便,因其可以自动处理编码问题。

例如:

 //使用properties
        Reader reader =new FileReader(config);
        Properties properties = new Properties();
        properties.load(reader);

        System.out.println(properties.getProperty("last-update"));

总结

Java获取Jar、war包路径的可行方法是通过Protection Domain,在使用时要注意不同平台的微小差异,掌握了这个方法,不但可以用来写配置文件,也可以用来存储下载的图片、视频等内容,因而尤其对客户端应用的开发人员来说,十分有必要去了解。文章来源地址https://www.toymoban.com/news/detail-822500.html

到了这里,关于Java获取Jar、War包路径,并生成可编辑修改的本地配置文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java -jar xxx.war安装为windows服务

    故事背景 后台启动 脚本启动 服务安装

    2023年04月11日
    浏览(24)
  • Linux 部署Java项目-jar包和war包(五)

    部署之前先说下两种包,java项目部署到服务器一般有用war包的,也有用jar包的,微服务spring-cloud普及后大部分打包都是jar,部署之前先搞清楚自己要打war包还是jar包,下面小介绍两种包的区别: spring boot既可以打成war发布,也可以打成jar包发布。说一下区别: jar包: 直接通

    2024年02月04日
    浏览(33)
  • Java项目中jar war pom包的区别

    1、pom:用在父级工程或聚合工程中,用来做jar包的版本控制,必须指明这个聚合工程的打包方式为pom。 project ...   modelVersion4.0.0/modelVersion   groupIdcom.wong.tech/groupId   artifactIdmyproject/artifactId   packagingpom/packaging   version1.0.0/version   namemyproject/name   urlhttp://maven.apache.org/url   !-

    2024年02月10日
    浏览(37)
  • 获取jar包里的资源路径

    jar中资源有其专门的URL形式: jar:!/{entry} 。所以,如果jar包中的类源代码用File f=new File(相对路径);的形式,是不可能定位到文件资源的,启动jar包时会报出FileNotFoundException。 打包时将文件放在jar包外,然后通过服务器的路径去获取文件,File file = new File(“服务器的资源路径”

    2024年02月13日
    浏览(25)
  • 【Jenkins】使用java -jar jenkins.war --httpPort=XXXX启动Jenkins报错【解决方案】

    👉欢迎关注博主【米码收割机】 👉一起学习C++、Python主流编程语言。 👉机器人、人工智能等相关领域开发技术。 👉主流开发、测试技能。 在cmd中,执行启动命令行: 报错信息如下: 5月 06, 2023 4:55:49 下午 Main verifyJavaVersion 严重: Running with Java class version 63 which is not in th

    2024年02月07日
    浏览(36)
  • Spring Boot学习随笔- 拦截器实现和配置(HandlerInterceptor、addInterceptors)、jar包部署和war包部署

    学习视频:【编程不良人】2021年SpringBoot最新最全教程 拦截器 :Interceptor 拦截 中断 类似于javaweb中的Filter,不过没有Filter那么强大 作用 Spring MVC的拦截器是一种用于在请求处理过程中进行预处理和后处理的机制。拦截器可以在请求到达控制器之前和之后执行一些操作,例如日

    2024年02月02日
    浏览(32)
  • Java web项目打包成war包,本地tomcat运行

    一、javaWeb项目(非maven项目,IntelliJ IDEA环境下)打包的方式如下: (1)首先在IntelliJ IDEA中选中自己要打包的项目,点击file,选择Project Structure。 (2)在Project Structure中选中Artifacts。 (3)点击左上角绿色的+号,选择Web Application Archive,选中你要打包的项目,图中即为for ‘

    2024年02月13日
    浏览(51)
  • java中获取配置文件路径中含有中文,出现乱码的情况解决方案

    问题背景: 读取配置文件,但是读到的目录信息是中文乱码的。 第一步: 参考代码如上截图,方法即:读取jdbc配置,获取了配置文件(jdbc.properties)地址,然后加载这个文件读取配置信息,但是获取的文件目录的地址中文转译了。 第二步: 设置编码格式为utf-8,查看重新获

    2024年02月16日
    浏览(34)
  • IDEA两种方法修改生成的jar包名字

    直接修改pom文件中的如下部分 修改完成后,点击maven中的package,就可以看到生成的jar包,名字已经发生了改变。 若IDEA目录没有变化,可以在file中对目录进行刷新。    不用方法一中的修改方式,也可以直接在build中对jar包名字进行指定。

    2024年02月12日
    浏览(31)
  • 怎么进入docker容器获取jar包并下载到本地

    今天公司通过jenkins发布到测试环境的之后,测试小姐姐在测试居然发现功能没有更新上去。查看gitlib看代码有合并,查看jenkins配置的打包的分支也没有错,查看jenkins打包日志也有拉最新代码打包,诡异,于是想去服务器上的docker 镜像拉取jar看看是啥情况。 连接linux服务器的

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包