Java操作属性文件,支持新增或更新多个属性

Java操作属性文件,支持新增或更新多个属性

一、更新或新增单个属性的方法

/**
    * 写入properties信息
    * @param filePath  绝对路径(包括文件名和后缀名)
    * @param parameterName  名称
    * @param parameterValue 值
    */
   public static void writeProperties(String filePath, String parameterName, String parameterValue) {

	   Properties props = new Properties();
       try {

           //如果文件不存在,创建一个新的
           File file=new File(filePath);
           if(!file.exists()){
	           file.createNewFile();
	       }

           InputStream fis = new FileInputStream(filePath);
           // 从输入流中读取属性列表(键和元素对)
           props.load(fis);
           fis.close();
           OutputStream fos = new FileOutputStream(filePath);
           props.setProperty(parameterName, parameterValue);
           // 以适合使用 load 方法加载到 Properties 表中的格式,
           // 将此 Properties 表中的属性列表(键和元素对)写入输出流
           props.store(fos, parameterName);
           fos.close(); // 关闭流
       } catch (IOException e) {
    	   System.err.println("Visit "+filePath+" for updating "+parameterName+" value error");
       }
   }

二、更新或新增N个属性的方法

/**
    * @Title: writeMultiProperty
    * @Description: TODO(修改属性文件的多个属性)
    * @param filePath 属性文件路径(绝对路径)
    * @param list 要更新或新增的一列值
    * @return void
    */
   public static void writeMultiProperty(String filePath, List<Pobj> list){
	   if(list == null || list.size() == 0) return;

	   Properties props = new Properties();
       try {
           //如果文件不存在,创建一个新的
           File file=new File(filePath);
           if(!file.exists()){
	           file.createNewFile();
	       }
           InputStream fis = new FileInputStream(filePath);
           // 从输入流中读取属性列表(键和元素对)
           props.load(fis);
           fis.close();
           OutputStream fos = new FileOutputStream(filePath);

           // 设置属性
           for(Pobj obj : list){
               props.setProperty(obj.getKey(), obj.getValue());
           }

           // 保存至属性文件
           props.store(fos, "update properties");

           fos.close(); // 关闭流
       } catch (IOException e) {
    	   System.err.println("Visit "+filePath+" for updating THE PROPERTIES value error");
       }
   }

多个属性的更新或新增需要用到一个辅助类,临时存储需要进行操作的值

/**
     * @ClassName: Pobj
     * @Description: TODO(辅助类,用来传递属性文件的每一条属性)
     * @author Bruce [email protected]
     * @date 2014-11-18 下午11:31:00
     */
    public static class Pobj{

    	private String key;
    	private String value;

    	public Pobj(){}

    	/**
    	 * <p>Title: </p>
    	 * <p>Description: </p>
    	 * @param key
    	 * @param value
    	 */
    	public Pobj(String key, String value){
    		this.key = key;
    		this.value = value;
    	}

		public String getKey() {
			return key;
		}
		public void setKey(String key) {
			this.key = key;
		}
		public String getValue() {
			return value;
		}
		public void setValue(String value) {
			this.value = value;
		}

    }

三、读取属性文件的方法

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SettingsJNWJ {

	private static final Logger LOGGER = LoggerFactory.getLogger(SettingsJNWJ.class);

	private static SettingsJNWJ instance;

	public Properties settings = new Properties();

	public SettingsJNWJ() {
		String filename = ("d:/jnwj.properties");
		LOGGER.info("Loading " + filename  + "...");
		InputStream stream = null;
		try {
			stream = new FileInputStream(filename);
			settings.load(stream);
			LOGGER.info( filename  + " loaded");
		} catch (IOException e) {
			LOGGER.error("Failed to  " + filename  , e);
		} finally {
			if(stream != null) IOUtils.closeQuietly(stream);
		}
	}

	public synchronized static SettingsJNWJ getInstance() {
		if (instance == null) {
			instance = new SettingsJNWJ();
		}

		return instance;
	}

	public String getString(String key) {
		return settings.getProperty(key);
	}

	public static void main(String[] args) {
		SettingsJNWJ s = SettingsJNWJ.getInstance();
		System.out.println(s.settings.toString());
//		System.out.println(SettingsJNWJ.getInstance().getString("uname"));
	}
}

附,属性文件内容 [ jnwj.properties ]

uname=wckj
upass=wckj123456
unitcode=2340958039458

四、测试

/**
	 * @Title: main
	 * @Description: TODO(这里用一句话描述这个方法的作用)
	 * @param @param args    设定文件
	 * @return void    返回类型
	 * @throws
	 */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
//    	test1();
    	test2();
    }

    /**
     * @Title: 多个属性新增或更改的测试
     */
    public static void test2(){
    	List<Pobj> list = new ArrayList<Pobj>();
    	list.add(new Pobj("uname", "wckj"));
    	list.add(new Pobj("upass", "wckj123456"));
    	list.add(new Pobj("unitcode", "2340958039458"));
    	writeMultiProperty("D:/aiterw/conf/jnwj.properties", list);
        System.out.println(SettingsJNWJ.getInstance().settings.toString());
    }

    /**
     * @Title: 单个属性新增或更改的测试
     */
    public static void test1(){
        //写文件
        String passwork = "wckj123456";
        String jnwj = Settings.getInstance().getString("jnwj"); //这里可以直接写成自己的属性文件位置, 如:d:/jnwj.properties
        writeProperties(jnwj, "upass", passwork); 

        //从文件中取出userPassword,
        System.out.println(SettingsJNWJ.getInstance().getString("upass"));
    }

参考:http://www.oschina.net/code/snippet_116183_12472#21008

时间: 2024-11-05 20:48:19

Java操作属性文件,支持新增或更新多个属性的相关文章

JAVA操作properties文件

java中的properties文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件,文件的内容是格式是"键=值"的格式,在properties文件中,可以用"#"来作注释,properties文件在Java编程中用到的地方很多,操作很方便.一.properties文件test.properties------------------------------------------------------###########

java操作properties文件简单学习

java操作properties文件的工具类简单封装: 注意:由于本地和环境和linux服务的路径有区别,或者jetty,resin,tomcat部署后,文件的路径也是有区别的.比如我们在linux上把项目放在另一个磁盘下,此时,文件的路径就是项目所在的路径,而不是WEB-INF下,所以,这里需要灵活配置! package com.sohu.util; import java.io.BufferedInputStream; import java.io.File; import java.io.

java操作XML文件

XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作. 在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析 先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容. 用的较为多的是Dom4j工具(非官方)解析,简单介绍下Dom4j的使用,具体API文档请下载

java 操作excel 文件

JAVA EXCEL API:是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容.创建新的Excel文件.更新已经存在的Excel文件.使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表.因为它是使用Java编写的,所以我们在Web应用中可以通过JSP.Servlet来调用API实现对Excel数据表的访问. 下载: 官方网站 http://www.andykhan.com/jexcelapi/ 下载最新版本(本人下的是jexcelapi_2_6

Java操作XML文件 dom4j 篇

在项目中,我们很多都用到了xml文件,无论是参数配置还是与其它系统的数据交互.今天就来讲一下Java 中使用dom4j来操作XML文件. 我们需要引入的包: //文件包 import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; //工具包 import java.util.Iterator; import java.util.List; //dom4j包 import org.dom

用java操作XML文件(DOM解析方式)

XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DOM解析方式 在java工程中导入dom4j.jar包. (一)用java读XML文件 <1>创建SAXReader对象. RAXReader reader=new RAXReader(); <2>调用RAXReader的Document read(File file)方法,获取xml文

java操作大文件复制

1.大文件的复制可以用Java nio中的channel-to-channel传输,Channel-to-channel传输是可以极其快速的,特别是在底层操作系统提供本地支持的时候.某些操作系统可以不必通过用户空间传递数据而进行直接的数据传输.对于大量的数据传输,这会是一个巨大的帮助. 2.代码 package com.dingwang.File; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; i

Java操作excel文件

http://www.cnblogs.com/wuxinrui/archive/2011/03/20/1989326.html import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; public class ReadExcel { public static void main(String[] args) { try { //直接从本地文件(.xls)创建Workbook String exce

【转】Java操作CSV文件导入导出

特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/mao2080/ 1 public class CSVUtils { 2 3 /** 4 * 5 * 描述:导出 6 * @author [email protected] 7 * @created 2017年8月26日 下午2:39:13 8 * @since 9 * @param file cs