java 通过IO流获取properties文件

创建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;
  }
}

你可能感兴趣的:(笔记,java)