龙空技术网

你会加载properties文件吗

程序员的交流电 94

前言:

当前兄弟们对“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配置文件需要重启吗