java操作properties文件

java读写Properties文件中文问题:

InputStream/OutPutStream只是处理2进制数据,InputStreamReader/OutputStreamWriter包含处理编码文本,这里用后者就可以解决读写properties中文问题。

读Properties文件:Properties p = new Properties(); 
    p.load(new InputStreamReader(new FileInputStream(new File("properties文件路径"))));
写properties文件(修改的话先读后写)
    p.store(new OutputSreamWriter(new FileOutputStream(new File("properties文件路径"));

下面是操作的主要代码:
InputStream inputStream = null;		OutputStream fos = null;
		
try{
	SimpleDateFormat sdformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			
//	inputStream = new FileInputStream(this.getClass().getClassLoader().getResource("webData.properties").getPath());
			
	inputStream = this.getClass().getClassLoader().getResourceAsStream("webData.properties");
			
	Properties properties = new Properties();
			
	properties.load(inputStream);
			
	String updateID = new String(properties.getProperty("updateID").getBytes("ISO8859_1"), "UTF-8");
	String registerID = new String(properties.getProperty("registerID").getBytes("ISO8859_1"), "UTF-8");
			
	if(inputStream != null){
		inputStream.close();//一定要在修改值之前关闭流

	}		
	fos = new FileOutputStream(this.getClass().getClassLoader().getResource("webData.properties").getPath());
			
	if (StringUtils.isNotEmpty(updateID)) {
					
		properties.setProperty("updateID", MaxID);
	}
	if (StringUtils.isNotEmpty(registerID)) {
				  
		properties.setProperty("registerID", MaxID);
	}
	properties.store(fos, null);
}finally{
	if(fos != null){
		fos.flush();
		fos.close();
	}
}

一:properties文件介绍:
1:properties文件在java开发中使用的比较多,主要是一些配置不希望在程序中写死,而采用properties文件这样在不同的地方使用只需要修改properties文件而不用修改程序,最平常的是使用在数据库配置中或信息配置中,在开发多语言版本的时候也很有用处,你不同的语言版本使用不同的配置文件,这样你就可以不修改程序也不用在程序中在判断,只需要把文件放在不同的地方就可以使用。
2:Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。

二:准备
使用properties文件你需要使用java.util.ResourceBundle充分了解,同时你需要把properties文件放在classpath中,这样系统启动是才能加载文件。

三:加载properties文件
ResourceBundle msgBundle=ResourceBundle.getBundle(msgResource,Locale.CHINA);使用上面的语句你就可以加载properties文件文件了,但你必须保证properties 文件放在classpath中。同时请参考Java API java.util.ResourceBundle;

四:使用properties
1:现在你需要取到properties文件中的内容,使用ResourceBundle里面的getString() 方法就可以了。但需要注意的是getString取到的是ISO字符串,你可能根据需要转换为不同的字符串。
2:在我们知道如何读写一个属性文件之后,我们仍然还有很多需要注意的问题,因为load和store方法都是按照ISO-8859-1的编码方式读写属性流文件的,而ILatin1 的字符和某些特殊字符,而对于非Latin1 的字符和某些特殊字符,则要使用与字符和字符串字面值所用的类似转义序列,以值和元素的形式来表示它们。所以当我们在处理中文时,不可以在直接修改属性文件时,将中文的值赋予给属性,而是要在JAVA程序中通过setProperty方法给属性赋予中文的值,因为这样store会将中文转换成 unicode码,在读取时系统会将读取到的unicode码按系统的编码打印出来,对于中文系统,通常是GBK码,这样中文才能够正常显示。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值