创建properties文件
在resources目录下创建classinfo.properties文件
className=com.xiaoma.myThreadTest.DeadLock
创建一个类,去读取这个配置文件,这种方式不灵活,learn-reflect是该模块的名称,
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
/**
* 通过IO流获取properties文件
*/
public class IOTest01 {
public static void main(String[] args) throws IOException {
// 通过IO流获取classinfo.properties文件
FileReader fileReader = new FileReader("learn-reflect/src/main/resources/classinfo.properties");
// 创建属性类对象map
Properties properties = new Properties();
// 加载
properties.load(fileReader);
// 关闭流
fileReader.close();
//通过key 获取value
String className = properties.getProperty("className");
System.out.println(className);
}
}
下面这种方式更灵活,即使是部署到Liunx上也可以用
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 通过IO流获取properties文件
*/
public class IOTest02 {
public static void main(String[] args) throws IOException {
/*
解释:
这种方式更通用
Thread.currentThread() 当前线程对象
getContextClassLoader() 是线程对象的方法,可以获取到当期线程的类加载器对象
getResourceAsStream() 直接返回一个流对象
*/
//采用这个代码可以拿到一个绝对路径
//String path = Thread.currentThread().getContextClassLoader().getResource("classinfo.properties").getPath();
//直接获取一个流对象
InputStream resourceAsStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("classinfo.properties");
// 创建属性类对象map
Properties properties = new Properties();
// 加载
properties.load(resourceAsStream);
// 关闭流
resourceAsStream.close();
//通过key 获取value
String className = properties.getProperty("className");
System.out.println(className);
}
}
另外,用java.util包下的资源绑定器获取,更爽
/**
* java.util包下提供了一个资源绑定器,便于获取属性配置文件中的内容。
* 使用一下这种方式的时候,属性配置文件xxx.properties必须放在类路径下
*/
public class IOTest03 {
public static void main(String[] args) {
// 资源绑定器,只能绑定xxx.properties文件,并且这个文件必须放在类路径下,文件名也必须是properties
// 并且,写路径的时候,路径后面的扩展名不能写
ResourceBundle resourceBundle = ResourceBundle.getBundle("classinfo");
String className = resourceBundle.getString("className");
System.out.println(className);
}
}
也可以用Spring 提供的注解@PropertySource获取
@Component
@PropertySource("classpath:classinfo.properties")
public class IOTest04 {
@Value("${className}")
private String className;
public String getClassName() {
return className;
}
}