properties是一种属性文件,这种文件以key=value格局存储内容。Java中可以利用java.util.Properties类来读取这个文件,按照左边的key获取值,String value=p.getProperty(key);
多种解析属性文件的体例中java.util.Properties解析文件的体例是同一的,都是经由过程load加载InputStream 对象。本家儿如果获取InputStream 对象的体例分歧,现实利用中我们不一定能精确获取properties属性文件的绝对路径。
属性文件在eclipse和IDEA没有安装插件的环境下展示时会将中文转为Unicode编码,eclipse选中内容F2会显示具体的中文内容(如下图)。
第一种:本家儿如果经由过程class.getClassLoader().getResourceAsStream
1、是实现获取在classpath路径下的资本文件的输入流
为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资本文件移至WEB-INF/classes,classPath目次其实就是这个classes目次。这个目次下放的一般是web项目运行时的class文件、资本文件(xml,properties...);
2、本家儿要代码:
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class PropertiesUtils {
/**
* 按照key获取cfg.properties的值
*
* @param key
* @return
*/
public static String getCfgPropertiesValue(String key) {
Properties pro = new Properties();
InputStream is = null;
try {
is = PropertiesUtils.class.getClassLoader().getResourceAsStream(
"CodeMapping.properties");
System.out.println();
// 读取属性文件
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return pro.getProperty(key);
}
}
3、main方式测试成果
public class Test5 {
public static void main(String[] args) {
System.out.println("name:"
+ PropertiesUtils.getCfgPropertiesValue("name"));
}
}
第二种:经由过程class.getResourceAsStream(String name)获取。
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test5 {
public static void main(String[] args) {
System.out.println("name:" + getCfgPropertiesValue("name"));
}
/**
* 按照key获取CodeMapping.properties的值
* @param key
* @return
*/
public static String getCfgPropertiesValue(String key) {
Properties pro = new Properties();
InputStream is = null;
try {
is = Test5.class
.getResourceAsStream("/CodeMapping.properties");
System.out.println();
// 读取属性文件
pro.load(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (is != null) {
is.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return pro.getProperty(key);
}
}
第三种:利用绝对路径解析。
1、这种利用绝对路径的体例需要你可以或许精确供给位置
2具体代码如下所示:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class Test5 {
public static void main(String[] args) {
System.out
.println("name:"
+ getPropertiesValue(
"D:/Workspaces/MyEclipse 10/servlet/src/CodeMapping.properties",
"name"));
}
public static String getPropertiesValue(String filePath, String key) {
Properties pro = new Properties();
InputStream in = null;
try {
// 读取属性文件
in = new FileInputStream(filePath);
pro.load(in);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return pro.getProperty(key);
}
}
第一步:javaweb项目打包总结。
1、通俗javaweb项目中的编译会将内容编译在WEB-INF\classes
1、springboot项目当地开辟会将src/main/java和resources目次下的内容编译到target\classes下。打当作jar包之后:excelimport-0.0.1-SNAPSHOT.jar。目次为:excelimport-0.0.1-SNAPSHOT.jar\BOOT-INF\classes
第二步:class.getClassLoader().getResourceAsStream(file)和class.getResourceAsStream(file)比力。
1、都是实现获取在classpath路径下的资本文件的输入流。
2、为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资本文件移至WEB-INF/classes,classPath目次其实就是这个classes目次。这个目次下放的一般是web项目运行时的class文件、资本文件(xml,properties...);
3、class.getClassLoader().getResourceAsStream(file)半斤八两于直接在根目次classes查找文件和Thread.currentThread().getContextClassLoader().getResourceAsStream一样,文件不在根目次classes下无法读取。
InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("CodeMapping.properties");
4、class.getResourceAsStream(file)定位相对于文件夹classes获取下一级内容需要加“/”到具体目次
Test5.class.getResourceAsStream("/CodeMapping.properties");
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!