• 使用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();
    //		}
    	}
    }
    

      

  • 相关阅读:
    详解 CSS 属性
    【技巧】DataGridView,ListView重新绑定时保持上次滚动位置
    c#自动更新+安装程序的制作 (转)
    C#winform程序安装时自动卸载新版本覆盖旧版本
    C# 操作XML文件,用XML文件保存信息
    c# winform 隐藏tabcontrol标签
    datagridview用get,set访问并加锁,可以控制所有使用datagridview的地方都顺序进行访问
    sql 获取当天开始时间 结束时间
    批量导出指定注册表内容
    sql server 保留小数,向上保留指定位数的小数,仅记录,勿看。
  • 原文地址:https://www.cnblogs.com/Nbge/p/2783057.html
Copyright © 2020-2023  润新知