java读取properties配置文件总结

时间:2022-05-23 23:29:53

java读取properties配置文件总结

在日常项目开发和学习中,我们不免会经常用到.propeties配置文件,例如数据库c3p0连接池的配置等。而我们经常读取配置文件的方法有以下两种:

(1).使用getResourceAsStream()方法读取配置文件。

(2).使用InputStream()流去读取配置文件。

注意:在使用getResourceAsStream()读取配置文件时,要特别注意配置文件的路径的写法。

this.getClass.getResourceAsStream(fileName)..使用类和资源文件在同一目录下;

this.getclass.getLoader.getResourceAsStream(fileName)..资源文件和classes同级。

下面,我以一个实例来具体讲述分别使用上述两种方法来读取.properties配置文件。

1.项目结构

java读取properties配置文件总结

在项目中,.properties文件的存放路径基本有以上4种,所有在下面的测试中我会用2种方法读取上面的4种不同路径下的.properties文件。(对应上面的4个配置文件)

(1).src下面config.properties包内的配置文件;

 name=\u5F20\u4E09
age=23

(2).和使用配置文件位于同一包里面的.properties配置文件;

 name=\u674E\u56DB
age=14

(3).src根目录下面的配置文件;

 jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/goods
jdbc.usename=root
jdbc.password=123456

(4).位于另外一个source文件夹里面的配置文件。

 dbuser=user
dbpassword=root
database=javaTest

2.java读取properyies配置文件

首先,创建读取.properties的工具类PropertiesUtil.java

代码清单【1】

 package read.propertiesFile.test;

 import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.MessageFormat;
import java.util.Properties; /**
* java读取properties配置文件工具类
* @author Administrator
*
* 2016/12/04
*/
public class PropertiesUtil
{
public static final PropertiesUtil INSTANCE = new PropertiesUtil(); public static PropertiesUtil getInstance()
{
return INSTANCE;
}
/**
* 1.使用getSourceAsStream读取配置文件
*/
public void readPropertiesByGetSourceAsStream()
{
/*
* 1.src下面config.properties包内的配置文件
* test1.properties
*/
InputStream is1 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("config/properties/test1.properties"); /*
* 2.读取和JavaReadPropertiesTest类位于同一个包里面的配置文件
* test2.properties
*/
InputStream is2 = JavaReadPropertiesTest.class.getResourceAsStream("test2.properties"); /*
* 3.读取根目录下面的配置文件
* jdbc.properties
*/
InputStream is3 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); /*
* 4.读取位于另外一个source文件夹里面的配置文件
* config.properties
*/
InputStream is4 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("config.properties");
Properties p = new Properties();
System.out.println("使用getSourceAsStream()读取配置文件...");
try
{
System.out.println("---读取is1开始---");
p.load(is1);
System.out.println("test1.properties:name = "+ p.getProperty("name")
+ ",age = " + p.getProperty("age"));
System.out.println("---读取is1结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is2开始---");
p.load(is2);
System.out.println("test2.properties:name = "+ p.getProperty("name")
+ ",age = " + p.getProperty("age"));
System.out.println("---读取is2结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is3开始---");
p.load(is3);
System.out.println("jdbc.properties:");
// 这里的%s是java String占位符
System.out.println(String.format("jdbc.driver=%s",p.getProperty("jdbc.driver")));
System.out.println(String.format("jdbc.url=%s",p.getProperty("jdbc.url")));
System.out.println(String.format("jdbc.usename=%s",p.getProperty("jdbc.usename")));
System.out.println(String.format("jdbc.password=%s",p.getProperty("jdbc.password")));
System.out.println("---读取is3结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is4开始---");
p.load(is4);
System.out.println(MessageFormat.format("dbuser={0}", p.getProperty("dbuser")));
System.out.println(MessageFormat.format("dbpassword={0}", p.getProperty("dbpassword")));
System.out.println(MessageFormat.format("database={0}", p.getProperty("database")));
System.out.println("---读取is4结束---");
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if(null != is1)
{
try {
is1.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is2)
{
try {
is2.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is3)
{
try {
is3.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is4)
{
try {
is4.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
} /**
* 2.使用InputStream读取配置文件
*/
public void readPropertiesByInputStream()
{
InputStream is1 = null;
InputStream is2 = null;
InputStream is3 = null;
InputStream is4 = null;
System.out.println("使用InputStream读取配置文件...");
try
{
/*
* 1.src下面config.properties包内的配置文件
* test1.properties
*/
is1 = new BufferedInputStream(new FileInputStream("src/config/properties/test1.properties")); /*
* 2.读取和JavaReadPropertiesTest类位于同一个包里面的配置文件
* test2.properties
*/
is2 = new BufferedInputStream(new FileInputStream("src/read/propertiesFile/test/test2.properties")); /*
* 3.读取根目录下面的配置文件
* jdbc.properties
*/
is3 = new BufferedInputStream(new FileInputStream("src/jdbc.properties")); /*
* 4.读取位于另外一个source文件夹里面的配置文件
* config.properties
*/
is4 = new BufferedInputStream(new FileInputStream("config/config.properties")); Properties p = new Properties(); System.out.println("---读取is1开始---");
p.load(is1);
System.out.println("test1.properties:name = "+ p.getProperty("name")
+ ",age = " + p.getProperty("age"));
System.out.println("---读取is1结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is2开始---");
p.load(is2);
System.out.println("test2.properties:name = "+ p.getProperty("name")
+ ",age = " + p.getProperty("age"));
System.out.println("---读取is2结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is3开始---");
p.load(is3);
System.out.println("jdbc.properties:");
System.out.println(String.format("jdbc.driver=%s",p.getProperty("jdbc.driver")));
System.out.println(String.format("jdbc.url=%s",p.getProperty("jdbc.url")));
System.out.println(String.format("jdbc.usename=%s",p.getProperty("jdbc.usename")));
System.out.println(String.format("jdbc.password=%s",p.getProperty("jdbc.password")));
System.out.println("---读取is3结束---");
System.out.println("-----------------------------------------------"); System.out.println("---读取is4开始---");
p.load(is4);
System.out.println("config.properties:");
System.out.println(MessageFormat.format("bduser={0}", p.getProperty("bduser")));
System.out.println(MessageFormat.format("bdpassword={0}", p.getProperty("bdpassword")));
System.out.println(MessageFormat.format("database={0}", p.getProperty("database")));
System.out.println("---读取is4结束---"); }
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
if(null != is1)
{
try {
is1.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is2)
{
try {
is2.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is3)
{
try {
is3.close();
}
catch (IOException e)
{
e.printStackTrace();
}
} if(null != is4)
{
try {
is4.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
}

然后,JUnit测试 JavaReadPropertiesTest.java

代码清单【2】

 package read.propertiesFile.test;

 import org.junit.Test;

 /**
* java读取properties配置文件
* @author Administrator
*
*/ public class JavaReadPropertiesTest
{
/**
* 1.使用getSourceAsStream读取配置文件测试
*/
@Test
public void readPropertiesByGetSourceAsStreamTest()
{
PropertiesUtil.getInstance().readPropertiesByGetSourceAsStream();
} /**
* 2.使用InputStream读取配置文件测试
*/
@Test
public void readPropertiesByInputStreamTest()
{
PropertiesUtil.getInstance().readPropertiesByInputStream();
} }

3.输出结果

 使用getSourceAsStream()读取配置文件...
---读取is1开始---
test1.properties:name = 张三,age = 23
---读取is1结束---
-----------------------------------------------
---读取is2开始---
test2.properties:name = 李四,age = 14
---读取is2结束---
-----------------------------------------------
---读取is3开始---
jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/goods
jdbc.usename=root
jdbc.password=123456
---读取is3结束---
-----------------------------------------------
---读取is4开始---
dbuser=user
dbpassword=root
database=javaTest
---读取is4结束---
使用InputStream读取配置文件...
---读取is1开始---
test1.properties:name = 张三,age = 23
---读取is1结束---
-----------------------------------------------
---读取is2开始---
test2.properties:name = 李四,age = 14
---读取is2结束---
-----------------------------------------------
---读取is3开始---
jdbc.properties:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/goods
jdbc.usename=root
jdbc.password=123456
---读取is3结束---
-----------------------------------------------
---读取is4开始---
config.properties:
bduser=null
bdpassword=null
database=javaTest
---读取is4结束---

4.补充

在这里,我在简要介绍一下,读取配置文件的全部配置信息的方法,以jdbc.properties文件为例。

 /**
* 3.循环读取配置文件的全部信息
*/
public void readAllInfo()
{
/*
* 3.读取根目录下面的配置文件
* jdbc.properties
*/
InputStream is3 = JavaReadPropertiesTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties p = new Properties();
System.out.println("---读取is3开始---");
try
{
p.load(is3);
//读取资源文件的所有的key值
Enumeration en= p.propertyNames();
System.out.println("读取is3开始...");
while(en.hasMoreElements())
{
String key = (String) en.nextElement();
System.out.println(key + "=" + p.getProperty(key)); }
System.out.println("读取is3结束...");
}
catch (IOException e)
{
e.printStackTrace();
System.out.println("读取资源文件出错");
}
finally
{
if(null != is3)
{
try
{
is3.close();
System.out.println("关闭is3...");
}
catch (IOException e)
{
e.printStackTrace();
}
}
} }

输出结果是:

 ---读取is3开始---
读取is3开始...
jdbc.url=jdbc:mysql://localhost:3306/goods
jdbc.driver=com.mysql.jdbc.Driver
jdbc.usename=root
jdbc.password=123456
读取is3结束...
关闭is3...

至此,读取配置文件的总结就先这样,后期有新的体会时,在进行增加。谢谢观阅。