前言:
当前兄弟们对“java properties 路径”大致比较珍视,姐妹们都想要分析一些“java properties 路径”的相关知识。那么小编也在网上汇集了一些有关“java properties 路径””的相关知识,希望我们能喜欢,兄弟们快快来了解一下吧!目前springboot框架可以很方便的加载properties文件,让程序员可以变得更懒,你会自己编写util工具类来加载properties文件吗?
其实加载properties文件的本质上都使用使用了java的Properties类的load(InputStream inputStream)进行加载的。
关键的不同之处在于把properties转换为inputStream,在读取的时候,一般分为两种情况,第一种是properties打包在项目里面 ,第二种是properties在系统上面
1 加载resource下面的properties文件
对于第一种,我们常用的是使用java中的classloader或者是class的然后使用getResourceAsStream来将数据读取到inputStream,需要主要的是代码中的三种加载方法只可以
public static Properties loads(String fileName){ Properties properties=null; InputStream resourceAsStream=null; try { properties=new Properties(); //这里的1和2都是可以直接的写文件名就可以了,但是第三种需要在前面加/ 例如/test.properties //1.resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName); //2. resourceAsStream = ClassLoader.getSystemResourceAsStream(fileName); resourceAsStream = Mytests.class.getResourceAsStream(fileName); properties.load(resourceAsStream); } catch (Exception e) { logger.error(e.getMessage()); } finally { if(resourceAsStream!=null){ try { resourceAsStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return properties; }
加载resource里面的文件可以使用spring提供的PropertiesLoaderUtils
public static Properties springLoad(String filename){ Properties properties=null; try { properties = PropertiesLoaderUtils.loadAllProperties(filename); } catch (IOException e) { logger.error(e.getMessage()); } return properties; }
最后还有一种ResourceBundle读取resource下面的方法,一般使用的不是很多,使用起来也没有Properties方便。
2 加载系统上面的properties文件
加载系统上面的properties文件在项目开发也是比较常用的,是的我们每次修改一些配置的时候,不需要重新的打包,修改是比较方便的,只需要重启项目就可以了
本质是创建FileInputstream然后直接冲系统中读取数据到FileInputStream中
public static Properties load(String fileName) { Properties properties = null; try { properties = new Properties(); final FileInputStream fileInputStream = new FileInputStream(fileName); properties.load(fileInputStream); } catch (Exception e) { logger.error(e.getMessage()); } return properties; }
3 编写可以同时加载resource目录下面和系统上面的properties文件
//用这个枚举进行区分public enum FileForm { FILE_SYSTEM,//properties存在于文件系统中 CLASSPATH;//properties存在于classpath路径下面}public static Properties load(String fileName, FileForm fileForm) { Properties pro = null; InputStream is = null; try{ pro=new Properties(); //对文件存在文件系统中还是resource中进行判断 if (FileForm.FILE_SYSTEM.equals(fileForm)){ is=new FileInputStream(fileName); }else{ is=ClassLoader.getSystemResourceAsStream(fileName); } pro.load(is); }catch (Exception e){ logger.error(e.getMessage()); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return pro; }
//用这个枚举进行区分public enum FileForm { FILE_SYSTEM,//properties存在于文件系统中 CLASSPATH;//properties存在于classpath路径下面}public static Properties load(String fileName, FileForm fileForm) { Properties pro = null; InputStream is = null; try{ pro=new Properties(); //对文件存在文件系统中还是resource中进行判断 if (FileForm.FILE_SYSTEM.equals(fileForm)){ is=new FileInputStream(fileName); }else{ is=ClassLoader.getSystemResourceAsStream(fileName); } pro.load(is); }catch (Exception e){ logger.error(e.getMessage()); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return pro; }
//用这个枚举进行区分public enum FileForm { FILE_SYSTEM,//properties存在于文件系统中 CLASSPATH;//properties存在于classpath路径下面}public static Properties load(String fileName, FileForm fileForm) { Properties pro = null; InputStream is = null; try{ pro=new Properties(); //对文件存在文件系统中还是resource中进行判断 if (FileForm.FILE_SYSTEM.equals(fileForm)){ is=new FileInputStream(fileName); }else{ is=ClassLoader.getSystemResourceAsStream(fileName); } pro.load(is); }catch (Exception e){ logger.error(e.getMessage()); }finally { if(is!=null){ try { is.close(); } catch (IOException e) { e.printStackTrace(); } } } return pro; }
标签: #java properties 路径 #java修改properties文件需要重启吗 #java不重启修改properties #修改properties配置文件需要重启吗