在开发当中我们经常需要用到配置文件,我们可以在配置文件中很方便的设置需要进行修改和配置的参数值,有时候我们本地开发和生产环境中有些参数也不一样,比如数据库IP和账号密码等、要读取的文件夹路径、日志备份的时间和周期等等,有些人可能会说直接将这些值定义为final变量不久可以了吗?这样的缺点是我们将项目部署到生产环境中时还要重新调整Java代码,然后重新生成jar包或者war包,而定义到配置文件中可以直接打开jar进行修改,我们在配置文件中设置这些参数就很方便后续进行修改。
在java中常用的配置文件有properties、xml和txt,本文就来介绍一下这三种配置文件的读写方法。
properties文件是一个文本文件,以“键=值”的方式书写一个属性的配置信息。
从上面的类结构图可以看出,它继承了Hashtable并实现了Map接口
properties的属性配置键值前后的空格在解析时候会被忽略。
注 释:前面加上#号
读取properties文件,需要注意的是如果读取出的值含有中文的话会出现乱码的问题,需要再进行处理。
该properties文件放在项目resource/templates下面
代码如下:
//读取properties资源文件
public static String getProperties() {
Properties properties = new Properties();
try {
InputStream resourceAsStream = SysSetParaEditController.class.getClassLoader().getResourceAsStream("getGKCX.properties");
properties.load(resourceAsStream);
String head = properties.getProperty("head");
String content = properties.getProperty("content");
String body = properties.getProperty("body");
String function = properties.getProperty("function");
String arg = properties.getProperty("arg");
String functionend = properties.getProperty("functionend");
String bodyend = properties.getProperty("bodyend");
String contentend = properties.getProperty("contentend");
System.out.println(head + "-->" + head);
System.out.println(content + "-->" + content);
System.out.println(body + "-->" + body);
System.out.println(function + "-->" + function);
System.out.println(arg + "-->" + arg);
System.out.println(functionend + "-->" + functionend);
System.out.println(bodyend + "-->" + bodyend);
System.out.println(contentend + "-->" + contentend);
resourceAsStream.close(); //关闭流
}
catch (IOException e) {
e.printStackTrace();
}
//处理中文乱码
String imgFolder = properties.getProperty("imgFolder");
try {
imgFolder = new String(imgFolder.getBytes("ISO-8859-1"), "GBK"); // 处理中文乱码
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.out.println(imgFolder);
return imgFolder;
}
如果properties文件在本地的话,可以这样进行读取:
代码如下:
//读取properties资源文件
public static String getProperties() {
Properties pro = new Properties();
int maxTotal = 0;
int maxIdel = 0;
String host = null;
int port = 0;
try {
pro.load(new FileReader("D:\\sun\\getGKCX.properties"));
String imgFolder = properties.getProperty("imgFolder");
imgFolder = new String(imgFolder.getBytes("ISO-8859-1"), "GBK"); // 处理中文乱码
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(imgFolder);
return imgFolder;
}
public static void writePropertiesFile(String filename)
{
Properties properties = new Properties();
try{
//方法一:使用FileWriter
properties.setProperty("imgFolder", "D:\\sun");
//创建字节输出流/字符输出流,构造方法中绑定要输出的目的地
FileWriter fw=new FileWriter("D://a.txt");
//使用Properties集合中的方法store,把集合中的临时数据,持久写入到硬盘中
properties.store(fw, "save data");
//释放资源
fw.close();
//方法二:使用OutputStream
OutputStream outputStream = new FileOutputStream(filename);
properties.setProperty("imgFolder", "D:\\sun\\img");
properties.store(outputStream, "author: sun");
outputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
ML 指可扩展标记语言(EXtensible Markup Language),是一种标记语言,很类似 HTML。
在XML中,你可以拓展发明自己的标签,XML没有预定义的标签,XML允许创作者定义或设计自己的标签和文档结构
基本结构:
XML文档的后缀名 .xml
XML的第一行必须定义文档声明
在项目中经常见到的xml文件那就是pom.xml,相信大家对这个一定都不陌生吧!
还有mybatis使用的mybatis.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1/table?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&severTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>-->
<mappers>
<mapper resource="com/sun/server/mapper/xml/TScdLogMapper.xml"/>
<mapper resource="com/sun/server/mapper/xml/TScdOperateMapper.xml"/>
<mapper resource="com/sun/server/mapper/xml/TScdOperatePartsMapper.xml"/>
<mapper resource="com/sun/server/mapper/xml/TSysParainfoMapper.xml"/>
</mappers>
</configuration>
代码如下(示例):
public static void readPropertiesFileFromXML(String filename)
{
Properties properties = new Properties();
try
{
InputStream inputStream = new FileInputStream(filename);
properties.loadFromXML(inputStream);
inputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
String imgFolder = properties.getProperty("imgFolder");; //XML中的中文不用处理乱码,正常显示
}
代码如下(示例):
//写资源文件到XML文件,含中文
public static void writePropertiesFileToXML(String filename)
{
Properties properties = new Properties();
try
{
OutputStream outputStream = new FileOutputStream(filename);
properties.setProperty("imgFolder", "D:\\sun\\img");
properties.storeToXML(outputStream, "author: sun");
outputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}