Java读写资源文件类Properties
Java中读写资源文件最重要的类是Properties
1) 资源文件要求如下:
- properties文件是一个文本文件
- properties文件的语法有两种,一种是注释,一种属性配置。
属性配置:以“键=值”的方式书写一个属性的配置信息。
- properties文件的一个属性配置信息值可以换行,但键不可以换行。值换行用“\”表示。
- properties的属性配置键值前后的空格在解析时候会被忽略。
- properties文件可以只有键而没有值。也可以仅有键和等号而没有值,但无论如何一个属性配置不能没有键。
正确的资源文件格式为:
文章图片
2) 功能大致如下: 1. 读写Properties文件
2. 读写XML文件
3. 不仅可以读写上述两类文件,还可以读写其它格式文件如txt等,只要符合key=value格式即可.
Properties能读取以key,value存储的任何格式文件,看一下他的类结构就知道为什么了
文章图片
从上面的类结构图可以看出,它继承了Hashtable并实现了Map接口
3)代码演示:
package com.ifly.myhome.test;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;
public class PropertiesMyTest
{public static void main(String[] args)
{String readfile = "e:" + File.separator + "readfile.properties";
String writefile = "e:" + File.separator + "writefile.properties";
String readxmlfile = "e:" + File.separator + "readxmlfile.xml";
String writexmlfile = "e:" + File.separator + "writexmlfile.xml";
String readtxtfile = "e:" + File.separator + "readtxtfile.txt";
String writetxtfile = "e:" + File.separator + "writetxtfile.txt";
readPropertiesFile(readfile);
//读取properties文件
writePropertiesFile(writefile);
//写properties文件
readPropertiesFileFromXML(readxmlfile);
//读取XML文件
writePropertiesFileToXML(writexmlfile);
//写XML文件
readPropertiesFile(readtxtfile);
//读取txt文件
writePropertiesFile(writetxtfile);
//写txt文件
}//读取资源文件,并处理中文乱码
public static void readPropertiesFile(String filename)
{
Properties properties = new Properties();
try
{
InputStream inputStream = new FileInputStream(filename);
properties.load(inputStream);
inputStream.close();
//关闭流
}
catch (IOException e)
{
e.printStackTrace();
}
String username = properties.getProperty("username");
String passsword = properties.getProperty("password");
String chinese = properties.getProperty("chinese");
try
{
chinese = new String(chinese.getBytes("ISO-8859-1"), "GBK");
// 处理中文乱码
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
System.out.println(username);
System.out.println(passsword);
System.out.println(chinese);
}//读取XML文件,并处理中文乱码
public static void readPropertiesFileFromXML(String filename)
{
Properties properties = new Properties();
try
{
InputStream inputStream = new FileInputStream(filename);
properties.loadFromXML(inputStream);
inputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
String username = properties.getProperty("username");
String passsword = properties.getProperty("password");
String chinese = properties.getProperty("chinese");
//XML中的中文不用处理乱码,正常显示
System.out.println(username);
System.out.println(passsword);
System.out.println(chinese);
}//写资源文件,含中文
public static void writePropertiesFile(String filename)
{
Properties properties = new Properties();
try
{
OutputStream outputStream = new FileOutputStream(filename);
properties.setProperty("username", "myname");
properties.setProperty("password", "mypassword");
properties.setProperty("chinese", "中文");
properties.store(outputStream, "author: shixing_11@sina.com");
outputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}//写资源文件到XML文件,含中文
public static void writePropertiesFileToXML(String filename)
{
Properties properties = new Properties();
try
{
OutputStream outputStream = new FileOutputStream(filename);
properties.setProperty("username", "myname");
properties.setProperty("password", "mypassword");
properties.setProperty("chinese", "中文");
properties.storeToXML(outputStream, "author: shixing_11@sina.com");
outputStream.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}}
运行本程序所需的资源文件,我是放在E盘根目录,如E:/readfile.properties
1. readfile.properties
username=kh
password=kh
chinese=谓语2. writefile.properties
#author: shixing_11@sina.com
#Fri May 28 22:19:44 CST 2010
password=kh
chinese=\u8C13\u8BED
username=kh3. readxmlfile.xml
mypassword
中文
myname
4. writexmlfile.xml
kh
中文
kh
5. readtxtfile.txt
username=kh
password=kh
chinese=中文6. writetxtfile.txt
password=kh
chinese=/u4E2D/u6587
username=kh
4)Properties获取数据乱码解决 1.原因
Properties调用load(InputStream)时,读取文件时使用的默认编码为ISO-8859-1;当我们讲中文放入到properties文件中,通过getProperty(key)获取值时,取到得数据是ISO-8859-1格式的,但是ISO-8859-1是不能识别中文的。
【Java读写资源文件类Properties】2.解决方法
通过getProperty()获取的数据data既然是ISO-8859-1编码的,就通过data.getByte(“iso-8859-1”)获取获取,使用new String(data.getByte(“iso-8859-1”),”UTF-8”)进行转换。当然properties文件的编码类型需要和new String(Byte[],charst)中的第二个参数的编码类型相同
推荐阅读
- 投资|为什么“长期主义”在A股难以获得高收益?
- java基础|一文搞懂java中的高大上技术“反射”
- 投稿|超90亿元投资涌入数字疗法,明星资本都在怎么投
- rxjava|阿里二面(SpringBoot中如何设置HTTP缓存())
- java-ee|mysql查询速度 limit 1000,10 和limit 10 一样快吗()
- java|阿里最新秋招面经,腾讯/美团/字节1万道Java中高级面试题
- 喜马拉雅推小雅Nano音箱,丰富资源配合语音助手给你“好听”
- 投稿|逆向投资,便宜并非硬道理
- Java|Springboot配置Druid或Hikari连接池(并开启MyBatisPlus事务)
- java|JDK各个版本的新特性jdk1.5-jdk8