有时候,我们在编写java程序的时候,都是把一些可配置的新的写到配置文件里,但是不能跟项目一起打包,因为配置文件可能会需要经常修改,所以最好能在同级目录。
项目结构如下
![fa086f8d1dabb71e25e0ce790b9c3de6.png](https://i-blog.csdnimg.cn/blog_migrate/b581a9357176a6f2cd267c9d193c0483.jpeg)
可以看到,app.properties在同级目录下,打包为可执行jar过后,jar包里面没有app.properties文件,放到了外面,然后就可以轻松修改了。
工具类
/** * 用完美的单例模式获取properties的数据,加载为map * @author forever * */public class PropertiesUtil { //值可变,引用不可变 private static final Properties PROPERTIES =new Properties(); static{ initProperties(); } /** * @param key * @param defaultValue * @return */ public static String get(String key,String defaultValue){ if(PROPERTIES.isEmpty()) { throw new UnsupportedOperationException("配置未加载"); } String value =PROPERTIES.getProperty(key, defaultValue); return value; } /** * 获取默认配置的值,这个值可以动态修改 * @param key * @return */ public static String get(String key){ return get(key, ""); } private static void initProperties(){ InputStream is =null; try { //获取当前目录 String property = System.getProperty("user.dir"); //默认是linux os String fileName = "/app.properties"; //判断是否是windows os if(System.getProperty ("os.name").contains("Windows")) { fileName = "app.properties"; } // 读取当前目录下conf配置文件 File file = new File(property+fileName); PROPERTIES.clear(); is = new FileInputStream(file); PROPERTIES.load(is); }catch (IOException e) { e.printStackTrace(); }finally { if(is!=null) { try { is.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static void main(String[] args) { System.out.println(PropertiesUtil.get("name")); }}