使用JAVA读写Properties属性文件

自己定义一个属性文件:例如prop.properties

?
baseFilePath=D\:/kuanter/resource
tesx=abcd

  我们要做的第一步就是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用 InputStream的子类FileInputStream将属性文件读取到Properties对象中,知道prop.properties的路径,我们就用FileInputStream(String name)构造函数:

 

?
Properties prop = new  Properties(); //属性集合对象  
FileInputStream fis = new  FileInputStream( "prop.properties" ); //属性文件流  
prop.load(fis); //将属性文件流装载到Properties对象中 

 

?
1 . //获取属性值,baseFilePath已在文件中定义  
2 .   System.out.println( "获取属性值:baseFilePath="  + prop.getProperty( "baseFilePath" ));  
3 .   //获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件  
4 .   System.out.println( "获取属性值:country="  + prop.getProperty( "country" , "中国" ));

在保存属性集合到文件之前,我们还有一件事情就是如何修改和添加新的属性到属性集合,这里使用了一个方法就是setProperty(String key, String value),这个方法就是当属性集合中存在指定的key时,就修改这个key的值,如果不存在,就新建一个key,同样是通过键值关系保存的,但值得注意的是,Properties类继承自Hashtable,所以也可以用Hashtable的put和putAll方法保存,但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。那好,下面我们就来看看修改、添加和保存属性的程序:

//修改baseFilePath的属性值 
prop.setProperty("baseFilePath", "Boxcode"); 
//添加一个新的属性studio 
prop.setProperty("studio", "Boxcode Studio"); 
//文件输出流 
FileOutputStream fos = new FileOutputStream("prop.properties"); 
//将Properties集合保存到流中 
prop.store(fos, "Copyright (c) Boxcode Studio"); 
fos.close();//关闭流

  

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

具体在项目中的属性文件读写

 

?
package  TestPropertis;
 
//import java.io.FileInputStream;
//import java.io.FileNotFoundException;
import  java.io.IOException;
import  java.io.InputStream;
//import java.net.URL;
import  java.util.Properties;
 
/**
  * TODO
  * @author admin
  * @date 2012-11-22 下午05:17:28
  */
public  class  ReadWirtePropertis {
     public  static  void  main(String[] args) {
         Properties pro = new  Properties(); //属性集合对象
//      URL url = Thread.currentThread().getContextClassLoader().getResource("prop.properties");//获取项目中文件的路径
         InputStream path =Thread.currentThread().getContextClassLoader().getResourceAsStream( "prop.properties" ); //获取路径并转换成流
//      try {
//          FileInputStream fis = new FileInputStream("属性文件创建在电脑上");
             try  {
//              pro.load(fis);//将属性文件流装载到Properties对象中
                 pro.load(path);
//              fis.close();
                 System.out.println(pro.getProperty( "baseFilePath" ));
                 pro.setProperty( "shuzi" , "1111" ); //往属性文件插值
                 pro.setProperty( "shuzi" , "222" ); //更改属性值
                 System.out.println(pro.getProperty( "shuzi" ));
             } catch  (IOException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
             }
//      } catch (FileNotFoundException e) {
//          // TODO Auto-generated catch block
//          e.printStackTrace();
//      }
     }
}
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值