zoukankan      html  css  js  c++  java
  • 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 oiiopro@live.cn
         * @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"));
        }






  • 相关阅读:
    vue 中的单元测试
    redux-学习总结
    React-学习总结
    vuecli 中 chainWebpack 的常用操作
    常用 vue-config.js 配置
    JavaScript 中的 MVC、MVP、MVVM
    日常工作中 @vue/cli 需要关注的一些配置
    Electron 构建超时问题
    JSBridge 原理与封装
    Three.js 之相机
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5257551.html
Copyright © 2011-2022 走看看