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"));
    }










本文转自mfrbuaa博客园博客,原文链接:http://www.cnblogs.com/mfrbuaa/p/5257551.html,如需转载请自行联系原作者
相关文章
|
3月前
|
Java Unix Go
【Java】(8)Stream流、文件File相关操作,IO的含义与运用
Java 为 I/O 提供了强大的而灵活的支持,使其更广泛地应用到文件传输和网络编程中。!但本节讲述最基本的和流与 I/O 相关的功能。我们将通过一个个例子来学习这些功能。
207 1
|
6月前
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
294 14
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
255 9
|
6月前
|
存储 Java 编译器
深入理解Java虚拟机--类文件结构
本内容介绍了Java虚拟机与Class文件的关系及其内部结构。Class文件是一种与语言无关的二进制格式,包含JVM指令集、符号表等信息。无论使用何种语言,只要能生成符合规范的Class文件,即可在JVM上运行。文章详细解析了Class文件的组成,包括魔数、版本号、常量池、访问标志、类索引、字段表、方法表和属性表等,并说明其在Java编译与运行过程中的作用。
162 0
|
7月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
509 5
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
390 2
|
6月前
|
存储 人工智能 Java
java之通过Http下载文件
本文介绍了使用Java实现通过文件链接下载文件到本地的方法,主要涉及URL、HttpURLConnection及输入输出流的操作。
392 0
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
2890 65
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
7月前
|
网络协议 安全 Java
实现Java语言的文件断点续传功能的技术方案。
像这样,我们就完成了一项看似高科技、实则亲民的小工程。这样的技术实现不仅具备实用性,也能在面对网络不稳定的挑战时,稳稳地、不失乐趣地完成工作。
416 0
|
10月前
|
前端开发 Cloud Native Java
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Java||Springboot读取本地目录的文件和文件结构,读取服务器文档目录数据供前端渲染的API实现