Java练习(一):.properties,.ini ,.xml配置文件的读写等操作 (使用 Appache Commons Configuration)

目录

1. 要求

2. 分析

2.1 不使用现成的API, 自己去实现对ini 或者properties文件的读写

2.2 使用现成的API: Appache Commons Configuration

3. 实现代码

3.1 类PropertiesFile

3.2 类iniFile

3.3 测试类(入口类)MyDemo

3.4 运行结果

4. 补充练习

4.1 使用PropertiesConfiguration配置类读取.properties文件

4.2 使用XMLConfiguration配置类读取.xml文件


1. 要求

设计一个类IniFile:可以实现对.ini文件的读写
设计一个类PropertiesFile: 可以实现对.properties文件的读写

2. 分析

2.1 不使用现成的API, 自己去实现对ini 或者properties文件的读写

以properterties 为例子,处理思路:
匹配等号,左边是key 右边是value,然后匹配换行符(value值全部找到)
还要考虑 注释,匹配到井号,则跳过
上述这些是对文件的一个全文的扫描

代码略

2.2 使用现成的API: Appache Commons Configuration

相关依赖包(如果是maven项目,配置好pom.xml即可):

commons-configuration-1.10.jar

commons-lang-2.6.jar

commons-logging-1.1.1.jar

推荐文章:apache commons组件学习系列之configuration库 

推荐文章:apache commons-configuration包读取配置文件 

3. 实现代码

3.1 类PropertiesFile

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

import java.io.File;
import java.io.IOException;

public class PropertiesFile {
    File file;
    String filePath = null;
    PropertiesConfiguration config = new PropertiesConfiguration();

    //创建Properties日志文件
    public void createLog(String p_filePath){
        this.filePath = p_filePath;
        file = new File(this.filePath);
        if(!file.exists()){
            try {
                file.createNewFile(); //若文件不存在,则先创建
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            //config.load(new File(this.filePath)); //导入需要的properties文件
            config.load(file); //导入需要的properties文件
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
    }

    //往日志文件中写内容(键值对,用=)
    public void write(String p_key, String p_value){
        config.setProperty(p_key, p_value);
    }

    //从日志文件中读取内容(根据键读取值)
    public String read(String p_key){
        Object value = config.getProperty(p_key);
        return value.toString();
    }

    //保存内容然后关闭日志文件
    public void closeLog(){
        File file = new File(this.filePath);
        try {
            config.save(file);
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
        this.file = null;
        this.config = null;
        this.filePath = null;
    }
}

3.2 类iniFile

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.HierarchicalINIConfiguration;

import java.io.File;
import java.io.IOException;

public class IniFile {
    private String fileName = null;
    HierarchicalINIConfiguration ini = null; //定义,全局

    //创建ini日志文件
    public void createLog(String p_fileName){
        this.fileName = p_fileName;
        File file = new File(this.fileName);
        if(!file.exists()){
            try {
                file.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        try {
            ini = new HierarchicalINIConfiguration(this.fileName); //也可放在上面全局定义的地方
            //ini.load(new File(this.fileName)); //导入需要的ini文件
            ini.load(file); //导入需要的ini文件
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
    }

    //往日志文件中写内容(section, 键值对)
    public void write(String p_section, String p_key, String p_value){
        ini.setProperty(p_section + "." + p_key, p_value);  //注意这个固定格式,规定写法如此,记住即可
    }

    //从日志文件中读取内容(根据section和键,读取值)
    public String read(String p_section, String p_key){
        return ini.getString(p_section + "." + p_key); //注意这里用的是getString的方法,不是getProperties
    }

    //保存内容然后关闭日志文件
    public void closeLog(){
        try {
            ini.save();
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
        this.fileName = null;
        this.ini = null;
    }

}

3.3 测试类(入口类)MyDemo

public class MyDemo {
    public static void main(String[] args) {
        //操作.ini文件
        IniFile ini = new IniFile();
        ini.createLog("C:/iniLog.ini");
        ini.write("URL1", "url1", "www.baidu.com");
        System.out.println(ini.read("URL1", "url1"));
        ini.closeLog();

        //操作.properties文件
        PropertiesFile pro = new PropertiesFile();
        pro.createLog("C:/proLog.properties");
        pro.write("url2", "www.sina.com");
        pro.write("url3", "www.12345.cn");
        System.out.println(pro.read("url2"));
        System.out.println(pro.read("url3"));
        pro.closeLog();
    }
}

3.4 运行结果

控制台输出;

www.baidu.com
www.sina.com
www.12345.cn

生成日志文件:

iniLog.ini

[URL1]
url1 = www.baidu.com

proLog.properties

url2 = www.sina.com
url3 = www.12345.cn

4. 补充练习

4.1 使用PropertiesConfiguration配置类读取.properties文件

package com.tese.demo;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.PropertiesConfiguration;

import java.io.File;
import java.util.List;

public class PropertiesFile {
    static String proFileName = "C:\\Users\\pearl\\Desktop\\road\\2022\\conFile\\demo.properties";
    static File proFile = new File(proFileName);
    static PropertiesConfiguration propertiesConfiguration = null;

    static {
        propertiesConfiguration = new PropertiesConfiguration();
        try {
            propertiesConfiguration.load(proFile);
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
    }

    //当文件的内容发生改变时,配置对象也会刷新
    // propertiesConfiguration.setReloadingStrategy(new FileChangedReloadingStrategy());

    //读String
    public static String getString(String key){
        return propertiesConfiguration.getString(key);
    }

    //读int
    public static int getIntValue(String key){
        return propertiesConfiguration.getInt(key);
    }

    //读boolean
    public static boolean getBoolean(String key){
        return propertiesConfiguration.getBoolean(key);
    }

    //读List
    public static List<?> getListValue(String key){
        return propertiesConfiguration.getList(key);
    }

    //读Array数组
    public static String[] getArrayValue(String key){
        return propertiesConfiguration.getStringArray(key);
    }

    public static void main(String[] args) {
        String name = PropertiesFile.getString("name");
        System.out.println("name: " + name);

        int age = PropertiesFile.getIntValue("age");
        System.out.println("age: " + age);

        boolean flag = PropertiesFile.getBoolean("flag");
        System.out.println("flag: " + flag);

        List<?> list = PropertiesFile.getListValue("interest");
        System.out.println("interest list: " + list);

        String[] strArray = PropertiesFile.getArrayValue("interest");
        System.out.println("interest array: " + strArray[0]);

    }
}

demo.properties内容:

name=Sheryl
age=18
flag=true
interest=movie, book, shopping

 输出结果:

name: Sheryl
age: 18
flag: true
interest list: [movie, book, shopping]
interest array: movie

Process finished with exit code 0

4.2 使用XMLConfiguration配置类读取.xml文件

package com.tese.demo;

import org.apache.commons.configuration.ConfigurationException;
import org.apache.commons.configuration.XMLConfiguration;

import java.io.File;

public class XmlFile {
    public static String xmlFileName = "C:\\Users\\pearl\\Desktop\\road\\2022\\conFile\\demo.xml";
    public static File xmlFile = new File(xmlFileName);
    static XMLConfiguration xmlConfiguration = null;

    static {
        xmlConfiguration = new XMLConfiguration();
        try {
            xmlConfiguration.load(xmlFile);
        } catch (ConfigurationException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws ConfigurationException {
        System.out.println(xmlConfiguration.getString("database.url"));
        System.out.println(xmlConfiguration.getString("database.port"));
        System.out.println(xmlConfiguration.getString("database.login"));
        System.out.println(xmlConfiguration.getString("database.password"));
    }

}

//demo.xml的内容

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <database>
        <url>127.0.0.1</url>
        <port>8080</port>
        <login>Sheryl</login>
        <password>123</password>
    </database>>
</config>

//输出结果

127.0.0.1
8080
Sheryl
123

Process finished with exit code 0

遇到的问题

 在运行代码时,一直报错:java.lang.NoClassDefFoundError: org/apache/commons/collections/CollectionUtils......

原因:忘记添加相关依赖

解决方案

上面代码是在Maven项目中运行的,此时,需要在pom.xml中添加下方的依赖信息,保存。

重新运行程序,解决。

<dependency>
    <groupId>commons-collections</groupId>
    <artifactId>commons-collections</artifactId>
    <version>3.2.2</version>
</dependency>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值