小蘑菇网站开发,wordpress怎么上传视频,小公司有必要买财务软件吗,优秀产品设计前言
本地的可修改配置文件的编写理应是一个很常用的功能#xff0c;但由于数据库的存在#xff0c;它鲜少被提及#xff0c;大多数我们直接存储到数据库中了。
以至于现今#xff0c;除了没接触数据库的新手时常使用它以外#xff0c;它没有太多的出场机会。 也因此但由于数据库的存在它鲜少被提及大多数我们直接存储到数据库中了。
以至于现今除了没接触数据库的新手时常使用它以外它没有太多的出场机会。 也因此其实很多人不太了解其中的存储机制以及可能存在的一些坑。
不过也有适合用本地配置的时候例如我遇到了一个场景需要保存一个邮箱格式这个格式当然不会经常变化因而存储到数据库不太方便尤其我用的是关系型数据库MYSQL存起来感觉很别扭。如果存到Redis中一旦服务宕机数据就会消失虽然并不是很重要的数据但也不是很好的解决方案。
分析
要了解如何生成一个本地的可编辑配置文件首先就得想清楚文件应该放在哪
新手可能会直接回答这还不简单直接跟代码一样放classes目录下不就得了。
答案显然是不行的因为jar包本质上是一个压缩包如果你放在IDE中直接运行那么不会有任何问题但是一旦你需要打jar包或者war包。你就无法动态的去修改Jar包中的内容这点很容易理解。
所以比较科学的方法就是在Jar/War包的同级目录下新建一个配置文件。
1.获取Jar包同级目录
如何获取Jar包的同级目录可以使用jdk提供的Protection Domain。 以下代码可以得到当前代码源的位置简单来说就是编译生成的classes目录。
File filenew File filenew File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());但是要得到想要的Jar包路径还没有那么简单因为这里有一个坑在IDE中直接运行和打成Jar包后运行的效果是不同的。
例如以下的这段演示代码
String name new String(history.json);
File filenew 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);1IDE中 2windows下运行Jar 3Linux下运行Jar 路径问题总结
由此我们得出一个结论上述获取jar包路径的代码在IDE中运行的效果和打包后运行效果不同且打包后Windows和Linux运行效果基本一致。
我们想要的Jar文件夹路径需要向上获取三次父目录正确的在打包后获取Jar包路径的代码应该如下 resource即我们需要的配置文件路径使用File.seperator是为了不同平台的适配性。
String name new String(history.json);
File filenew File(this.getClass().getProtectionDomain().getCodeSource().getLocation().getFile());
File jarPath file.getParentFile().getParentFile().getParentFile().getParentFile();//jar所在文件夹路径
String resource jarPath.getPath().replace(file:,) File.separator name;2.读取与修改配置文件
有了对应的配置文件路径那么就很轻松了。
考虑到配置文件一般是Properties或Yaml格式这里以Java本身支持的Properties为例。
使用字符流读取较为方便因其可以自动处理编码问题。
例如 //使用propertiesReader reader new FileReader(config);Properties properties new Properties();properties.load(reader);System.out.println(properties.getProperty(last-update));总结
Java获取Jar、war包路径的可行方法是通过Protection Domain在使用时要注意不同平台的微小差异掌握了这个方法不但可以用来写配置文件也可以用来存储下载的图片、视频等内容因而尤其对客户端应用的开发人员来说十分有必要去了解。