java加载本地配置文件的方式盘点(spring的除外)

        在做项目时,时常会遇到很多配置文件需要加载,加载方式取决于项目架构,采用的什么技术,或者引入了什么架包就有相对应的加载方式,这里我采用的是jdk提供的加载方式或者引入简单jar实现的加载。

项目结构

java加载本地配置文件的方式盘点(spring的除外)_第1张图片

 

java加载配置文件

1.通过JDK的Properties类或者ResourceBundle类读取

/**
     * 通过Properties类读取
     * @return
     */
    public static Properties propertiesLoad(){
        Properties properties=new Properties();
        InputStream resourceAsStream =
                LoadProperties.class.getClassLoader().getResourceAsStream("application.properties");
        try {
            //相对路径找不到文件
            //FileInputStream fileInput = new FileInputStream("application.properties");
            //从src定义可以找到
            //FileInputStream fileInput = new FileInputStream("src/main/resources/application.properties");
            //通过Properties加载配置文件
            properties.load(resourceAsStream);
            //关闭输入流
            resourceAsStream.close();
            //返回properties对象,包含配置文件中的内容,key-value形式保存,获取通过配置文件中的key获取

        } catch (Exception e) {
            e.printStackTrace();
            //throw new RuntimeException(e);
        }
        /**
         * "jdbc.password" -> "123456"
         * "jdbc.username" -> "root"
         * "jdbc.url" -> "jdbc:mysql://localhost:3306/user"
         * "jdbc.driver" -> "com.mysql.jdbc.Driver"
         */
        return  properties;
    }
/**
     * ResourceBundle类读取
     * @return
     */
    public static ResourceBundle resourceBundleLoad(){
        //加载配置文件,默认从根目录下查询,不需要写扩展名
        ResourceBundle bundle=ResourceBundle.getBundle("application");
        //resourceBundle,包含配置文件中的内容,key-value形式保存,获取通过配置文件中的key获取
        /**
         * "jdbc.password" -> "123456"
         * "jdbc.username" -> "root"
         * "jdbc.url" -> "jdbc:mysql://127.0.0.1:3306/user"
         * "jdbc.driver" -> "com.mysql.jdbc.Driver"
         */
        return bundle;
    }

 2.通过io读取-使用FileReader和BufferedReader

/**
     *  通过io读取-使用FileReader和BufferedReader,觉得这种比较鸡肋,读取后还需要每行循环读取
     * @return
     */
    public static void fileReaderLoad(){
        try {
            //容易找不到文件路径,要写全
            FileReader fileReader = new FileReader("src/main/resources/application.properties");
            BufferedReader bufferedReader = new BufferedReader(fileReader);

            String line;
            while ((line = bufferedReader.readLine()) != null) {
                // 处理每一行配置
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

3.通过nio逐行读取 

/**
     * 通过nio逐行读取 也是比较鸡肋的,或者手动创建一个properties对象保存返回也行
     */
    public static void nioLoad(){
        try {
            List lines = Files.readAllLines(Paths.get("src/main/resources/application.properties"));
            for (String line : lines) {
                // 处理每一行配置
                System.out.println(line);
            }
        }catch (Exception e){
            e.printStackTrace();
        }

    }

4.通过Apache提供的配置类读取,需要导入commons-configuration2和commons-beanutils jar包

pom导入

java加载本地配置文件的方式盘点(spring的除外)_第2张图片

/**
     *  通过Apache提供的配置类读取
     * @return
     */
    public static Configuration configuration2Load(){
        Parameters params = new Parameters();
        PropertiesBuilderParameters properties = params.properties();
        FileBasedConfigurationBuilder builder =
                new FileBasedConfigurationBuilder<>(PropertiesConfiguration.class)
                        .configure(properties.setFileName("application.properties"));

        try {
            Configuration config = builder.getConfiguration();

            /**
             * "jdbc.password" -> "123456"
             * "jdbc.username" -> "root"
             * "jdbc.url" -> "jdbc:mysql://127.0.0.1:3306/user"
             * "jdbc.driver" -> "com.mysql.jdbc.Driver"
             */
            return config;

        } catch (ConfigurationException e) {
            e.printStackTrace();
            throw new RuntimeException();
        }

    }

5. 如果是yaml方式的配置文件,也可通过SnakeYAML类库读取

添加pom

java加载本地配置文件的方式盘点(spring的除外)_第3张图片

/**
     * 如果是yaml方式的配置文件,也可通过SnakeYAML类库读取
     * 虽说读取配置文件有局限性,但是返回键值对还是比较方便的
     */
    public static Map snakeYAMLLoad(){
        Yaml yaml = new Yaml();
        Map configMap=new HashMap<>();

        try {
            InputStream inputStream = new FileInputStream("config.yaml");
            configMap = yaml.load(inputStream);

            // 读取配置值
            String value = (String) configMap.get("key");

            System.out.println(value);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return configMap;
    }

 这里没有做测试

你可能感兴趣的:(基础,java,开发语言)