Properties
Properties类及其方法
打印JVM参数
打印自定义.properties文件中的值
获取值 getProperties
写入到Properties文件
存储和加载 xml 配置文件
一.Properties类及其方法
1.Properties简介
Properties 类位于 java.util.Properties ,是Java 语言的配置文件所使用的类,继承了Hashtable 类,以Map 的形式进行放置值, put(key,value) get(key)。 Xxx.properties 为Java 语言常见的配置文件,如数据库的配置 jdbc.properties, 系统参数配置 system.properties。
2. Properties方法
![]()
二. 打印JVM参数
JVM 中可以获取Properties, 来打印输出 JVM 所了解的属性值。用list() 方法,打印到控制台。
public static void main(String[] args) { //打印JVM中的属性值 Properties properties = System.getProperties(); properties.list(System.out); }
![]()
![]()
三. 打印自定义.properties文件中的值
test.properties文件
account=222017602053039 password=016891
1.list 输出到控制台,绝对路径加载
//获取加载的属性类 public static final Properties config = new Properties(); public static void main(String[] args) throws IOException { //获得文件输入流 InputStream inputStream = new >FileInputStream("G:\\Android_Studio\\AndroidStudioProjects\\JavaCode\\Java\\src\\main\\java\\swu\\xl\\day17_self_properties\\test.properties"); //加载输入流文件信息 config.load(inputStream); //根据key获取属性信息 System.out.println("账户:"+config.getProperty("account")+" 密码:"+config.getProperty("password")); //打印信息 config.list(System.out); } 输出: 账户:222017602053039 密码:016891 -- listing properties -- password=016891 account=222017602053039
2.propertyNames 输出,class.getResourceAsStream 加载
![]()
public class PropertiesLoad { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //获得文件输入流 InputStream inputStream = PropertiesLoad.class.getResourceAsStream("test.properties"); //加载输入流文件信息 config.load(inputStream); //打印信息 config.list(System.out); } } 输出: -- listing properties -- password=016891 account=222017602053039
3.stringPropertyNames 输出,class.getClassLoader().getResourceAsStream 加载
![]()
public class PropertiesLoadPath { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //获得文件输入流 InputStream inputStream = PropertiesLoadPath.class.getClassLoader().getResourceAsStream("swu/xl/day17_self_properties/test.properties"); //加载输入流文件信息 config.load(inputStream); //打印信息 config.list(System.out); } } 输出: -- listing properties -- password=016891 account=222017602053039
4.getResourceAsStream获取项目下的指定资源
① 当前类名.class.getResourceAsStream(String path)
path 不以
/
开头时默认是从此类所在的包下取资源,以/
开头则是从ClassPath根下(即/
代表src)获取。但是在Android Studio中/
代表模块名称/build/classes/java/main
。本质上是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。在同级目录下:com.x.y 下有类me.class ,同时在同级目录下有资源文件myfile.xml,则应使用
me.class.getResourceAsStream("myfile.xml");
在子目录下:例如:com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml,则应该使用
me.class.getResourceAsStream("file/myfile.xml");
② 当前类名.class.getClassLoader().getResourceAsStream(String path)
默认是从ClassPath根下获取,path不能以
/
开头,最终是由ClassLoader获取资源。在同级目录,例如:com.x.y 下有类me.class 同时有资源文件myfile.xml,则应该使用
me.class.getClassLoader.getResourceAsStream("com/x/y/myfile.xml");
不在同级目录下,也不在子目录下:例如:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml,则应该使用
me.class.getClassLoader.getResourceAsStream("com/x/file/myfile.xml");
四.获取值 getProperties
输出时,getProperty() 接受一个String类型key值,输出Key值对应的value 值。
如果没有key值,则输出 null 值。后面可以跟 default 值,如果没有key值,则输出设置的默认值。
public class GetProperty { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //获得文件输入流 InputStream inputStream = PropertiesLoad.class.getResourceAsStream("test.properties"); //加载输入流文件信息 config.load(inputStream); //打印信息 String account = config.getProperty("account","000"); String password = config.getProperty("password","000"); System.out.println("账户:"+account+" 密码:"+password); } }
五.写入到Properties文件
1.普通写入,中文时乱码,包括写入键值对时添加的注释出现中文也会乱码。
public class DefaultSet { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //获得文件输入流 InputStream inputStream = PropertiesLoad.class.getResourceAsStream("test.properties"); //加载输入流文件信息 config.load(inputStream); //设置值 config.setProperty("score","拟稿"); //将添加的键值对和以前的键值对一起写入properties文件并添加注释 OutputStream outputStream = new FileOutputStream("G:\\Android_Studio\\AndroidStudioProjects\\JavaCode\\Java\\build\\classes\\java\\main\\swu\\xl\\day17_self_properties\\test.properties"); config.store(outputStream,"修改后的信息"); } } 运行后test.properties文件的内容: #\u4FEE\u6539\u540E\u7684\u4FE1\u606F #Wed Sep 04 19:19:08 CST 2019 password=016891 account=222017602053039 score=\u62DF\u7A3F
2.解决写入乱码的问题,在构建输入流,输出流的同时,指定编码格式。注释内容还是会乱码。
public class UTF8Set { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //获得文件输入流 InputStream inputStream = PropertiesLoad.class.getResourceAsStream("test.properties"); //加载输入流输出流的同时,指定编码格式 config.load(new InputStreamReader(inputStream,"utf-8")); //设置值 config.setProperty("score","拟稿"); //将添加的键值对和以前的键值对一起写入properties文件并添加注释 OutputStream outputStream = new FileOutputStream("G:\\Android_Studio\\AndroidStudioProjects\\JavaCode\\Java\\build\\classes\\java\\main\\swu\\xl\\day17_self_properties\\test.properties"); config.store(new OutputStreamWriter(outputStream,"utf-8"),"修改后的信息"); } } 运行后test.properties文件的详细内容 #\u4FEE\u6539\u540E\u7684\u4FE1\u606F #Wed Sep 04 19:37:35 CST 2019 password=016891 account=222017602053039 score=拟稿
六.存储和加载 xml 配置文件
1.导出 内存键值对数据 到 .xml 配置文件 ---storeToXML
public class StoreToXml { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //设置值 config.setProperty("account","222017602053039"); config.setProperty("password","016891"); //创建输出流 OutputStream outputStream = new FileOutputStream("G:\\Android_Studio\\AndroidStudioProjects\\JavaCode\\Java\\src\\main\\java\\swu\\xl\\day17_self_properties\\test.xml"); //存储到xml中并确定编码 config.storeToXML(outputStream,"填充到xml","utf-8"); } } 运行后在给定的路径产生文件test.xml <?xml version="1.0" encoding="utf-8" standalone="no"?> <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> <properties> <comment>填充到xml</comment> <entry key="password">016891</entry> <entry key="account">222017602053039</entry> </properties>
2. 导出 .xml配置文件数据 到 内存---loadFromXML
public class LoadFromXml { public static void main(String[] args) throws IOException { //获取属性类 Properties config = new Properties(); //创建输入流 InputStream inputStream = new BufferedInputStream(new FileInputStream("G:\\Android_Studio\\AndroidStudioProjects\\JavaCode\\Java\\src\\main\\java\\swu\\xl\\day17_self_properties\\test.xml")); //加载xml文件 config.loadFromXML(inputStream); //打印信息 config.list(System.out); } } 运行结果: -- listing properties -- password=016891 account=222017602053039
参考文章
网友评论