`

文件存储配置信息增 改 删 查

阅读更多

本示例以properties格式文件为主

如果你自己想要其他格式的文件如txt等等,可以自己修改代码

如果你想要自己的解析格式也可以修改conf代码中的parseLine方法里的解析格式

1.配置文件:bsidinfo.properties

###gsmconf 存储短信发送配置信息,message:发送命令内容,comid=COM2端口号大写,baud=115200为短信设备的波特率,根据需求修改####
[gsmconf]
message=SMS:SET+WAKEUP
comid=COM3
baud=9600
###connectioninfo连接流媒体服务器的配置信息,IP、端口号port、用户名username 密码password,根据需求修改##
[connectioninfo]
port=7660
username=root
password=6973hiktb
ip=202.91.248.243

###以下是所有终端的配置信息,[]里代表的是终端的名称不能重复,bsid终端id号,simid手机号,status默认为0##
##这里你可以添加、修改、删除、任何终端,但是请慎重处理
[红满线85号塔_1013]
bsid=000001013
simid=15349919673
status=0
[3G-000001143]
bsid=000001143
simid=13396716823
status=0

 

2.代码:

   Conf.java

  

package cn.thunderbird.lm.media.util.conf;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.RandomAccessFile;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;

/**
 * 该类主要解析example.propertes文件
 * 格式:
 * #####是注释
 * [content]
 * key=value;
 * @author luqw
 */
public class Conf {
	private static final Logger log = Logger.getLogger(Conf.class);
	private static final ArrayList String = null;
	//all the node of properties will be restored.Every object type is ConfEntity class.
	private ArrayList nodeList = null;
	private String filePath = null;
	private Map current_map = null;
	private ConfEntity current_Entity = null;
	public Conf() {
	}
	/**
	 * 首先导入文件
	 * @param filePath
	 * @throws Exception
	 */
	public void importConf(String filePath) {
		RandomAccessFile randFile = null;
		try {
			this.filePath = filePath;
			randFile = new RandomAccessFile(filePath, "r");
		} catch (FileNotFoundException e) {
			closeRandomFile(randFile);
			System.out.println(Constant.E_OprConfigFileError
					+ filePath);
		}
		try {
			loadNodeList(randFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 *  */
	public void moveBak() {
		try {
			File destFile = new File(this.filePath);
			File bakFile = new File(this.filePath + ".bak");
			if (destFile.exists()) {
				destFile.delete();
			}
			bakFile.renameTo(destFile);
		} catch (Exception e) {
			System.out.println("move bak file[" + this.filePath
					+ ".bak] to oraginal file" + this.filePath + "] error:"
					+ e.getMessage());
		}
	}
	/**
	 * @throws Exception
	 */
	public void deleteBak() {
		try {
			File bakFile = new File(this.filePath + ".bak");
			if (bakFile.exists()) {
				bakFile.delete();
			}
		} catch (Exception e) {
			System.out.println("delete bak file[" + this.filePath
					+ ".bak] error:" + e.getMessage());
		}
	}
	/**
	 * @param rf
	 */
	public void closeRandomFile(RandomAccessFile rf) {
		try {
			if (rf != null) {
				rf.close();
			}
		} catch (Exception e) {
			System.out
					.println("close randomAccessFile error:" + e.getMessage());
		}
	}
	/**
	 * export and restore
	 **/
	public void exportConf() {
		RandomAccessFile rf = null;
		if (nodeList != null) {
			try {
				File oraFile = new File(this.filePath);
				File bakFile = new File(this.filePath + ".bak");
				if (bakFile.exists()) {
					bakFile.delete();
				}
				oraFile.renameTo(bakFile);
				rf = new RandomAccessFile(this.filePath, "rw");
				rf.seek(rf.length());
				Iterator it = nodeList.iterator();
				boolean isFirstLine = true;
				while (it.hasNext()) {
					ConfEntity entity = (ConfEntity) it.next();
					Map map = entity.getMap();
					String nodeName = "[" + entity.getNodeName() + "]";
					if (isFirstLine) {
						isFirstLine = false;
					} else {
						nodeName = "\n" + nodeName;
					}
					rf.writeBytes(nodeName);
					if ((map != null) && (map.size() > 0)) {
						Iterator tt = map.keySet().iterator();
						while (tt.hasNext()) {
							String key = (String) tt.next();
							String value = (String) map.get(key);
							String line = "\n" + key + "=" + value;
							rf.writeBytes(line);
						}
					}
				}
				deleteBak(); //
			} catch (Exception e) {
				moveBak(); //
				System.out.println(Constant.E_OprConfigFileError
						+this.filePath
						+ e.getMessage());
			} finally {
				closeRandomFile(rf);
			}
		}
	}
	/**
	 * 载入文件里面的信息
	 * @param randFile
	 * @throws Exception
	 */
	public void loadNodeList(RandomAccessFile randFile) throws Exception {
		if (randFile != null) {
			try {
				String str;
				nodeList = new ArrayList();
				while ((str = randFile.readLine()) != null) {
					String strLine = str;
					parseLine(strLine);
				}
				if (current_Entity != null) {
					current_Entity.setMap(current_map);
					nodeList.add(current_Entity);
				}
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println(Constant.E_OprConfigFileError
						 + this.filePath);
			} finally {
				closeRandomFile(randFile);
			}
		}
	}
	/**
	 * 按照prperties文档格式解析文件
	 * #代表注释 不解析
	 * []解析
	 * @param lineStr
	 */
	public void parseLine(String lineStr) {
		if ((lineStr != null) && (lineStr.length() > 0)
				&& !lineStr.startsWith("#")) {
			if (lineStr.startsWith("[")) {
				// a new node
				if (current_Entity != null) {
					current_Entity.setMap(current_map);
					nodeList.add(current_Entity);
				}
				current_Entity = new ConfEntity();
				String nodeName = lineStr.substring(1, lineStr.length() - 1);
				current_Entity.setNodeName(nodeName);
				current_map = new HashMap();
			} else {
				if (lineStr.contains("=")) {
					String key = "";
					String value = "";
					int indexOfEq = lineStr.indexOf("=");
					key = lineStr.substring(0, indexOfEq);

					if ((lineStr.length() - 1) > indexOfEq) {
						value = lineStr.substring(indexOfEq + 1, lineStr
								.length());
					}
					current_map.put(key, value);
				}
			}
		}
	}
	/**
	 * getValue by node name and property key
	 * @param node
	 * @param key
	 * @return
	 */
	public String getValue(String node, String key) {
		String value = null;
		if ((nodeList != null) && (nodeList.size() > 0)) {
			Iterator it = nodeList.iterator();
			while (it.hasNext()) {
				ConfEntity entity = (ConfEntity) it.next();
				if (entity.getNodeName().equals(node)) {
					Map map = entity.getMap();
					if (map != null) {
						value = (String) map.get(key);
						break;
					}
				}
			}
		}
		return value;
	}
	/**
	 * 
	 * @param nodeName
	 * @throws Exception
	 */
	public void addNode(String nodeName) {
		if (nodeName != null) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				boolean hasNode = false; //
				Iterator it = nodeList.iterator();
				while (it.hasNext()) {
					ConfEntity entity = (ConfEntity) it.next();
					if (entity.getNodeName().equals(nodeName)) {
						hasNode = true;
						break;
					}
				}
				if (!hasNode) {
					ConfEntity entity = new ConfEntity();
					entity.setNodeName(nodeName);
					entity.setMap(null);
					nodeList.add(entity);
				}
			}
		}
	}

	/**
	 * @param nodeName
	 * @param key
	 * @param value
	 * @throws Exception
	 */
	public void addPropertie(String nodeName, String key, String value) {
		if (nodeName != null) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				boolean hasNode = false;
				Iterator it = nodeList.iterator();
				ConfEntity entity = null;
				while (it.hasNext()) {
					ConfEntity tempEntity = (ConfEntity) it.next();
					if (tempEntity.getNodeName().equals(nodeName)) {
						hasNode = true;
						entity = tempEntity;
						break;
					}
				}
				if (!hasNode) {
					entity = new ConfEntity();
					entity.setNodeName(nodeName);
					Map map = new HashMap();
					map.put(key, value);
					entity.setMap(map);
					nodeList.add(entity);
				} else {
					Map map = entity.getMap();
					if (map == null) {
						map = new HashMap();
					}
					map.put(key, value);
					entity.setMap(map);
				}
			}
		}
	}
	/**
	 *  
	 * @param nodeName
	 * @param map
	 * @throws Exception
	 */
	public void addPropertie(String nodeName, Map map) {
		if ((nodeName != null)) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				boolean hasNode = false;
				Iterator it = nodeList.iterator();
				ConfEntity entity = null;
				while (it.hasNext()) {
					ConfEntity tempEntity = (ConfEntity) it.next();
					if (tempEntity.getNodeName().equals(nodeName)) {
						hasNode = true;
						entity = tempEntity;
						break;
					}
				}
				if (!hasNode) {
					System.out.println("!hasNode");
					entity = new ConfEntity();
					entity.setNodeName(nodeName);
					entity.setMap(map);
					nodeList.add(entity);
				} else {
					Map oraMap = entity.getMap();
					if ((oraMap == null) || (oraMap.size() == 0)) {
						System.out.println("oraMap == null");
						oraMap = map;
					} else {
						Iterator mapIt = map.keySet().iterator();
						while (mapIt.hasNext()) {
							String key = (String) mapIt.next();
							String value = (String) map.get(key);
							oraMap.put(key, value);
						}
					}
				}
			}
		}
	}

	/**
	 * 
	 * @param nodeName
	 * @throws Exception
	 */
	public void removeNode(String nodeName) {
		if (nodeName != null) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				boolean hasNode = false;
				Iterator it = nodeList.iterator();
				while (it.hasNext()) {
					ConfEntity entity = (ConfEntity) it.next();
					if (entity.getNodeName().equals(nodeName)) {
						nodeList.remove(entity);
						break;
					}
				}
			}
		}
	}

	/**
	 * 
	 * @param nodeName
	 * @param key
	 */
	public void removeKey(String nodeName, String key) {
		if ((nodeName != null) && (key != null)) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				Iterator it = nodeList.iterator();
				while (it.hasNext()) {
					ConfEntity entity = (ConfEntity) it.next();
					if (entity.getNodeName().equals(nodeName)) {
						Map map = entity.getMap();
						map.remove(key);
						break;
					}
				}
			}
		}
	}
	/**
	 * @param nodeName
	 * @param key
	 * @param value
	 */
	public void setProperties(String nodeName, String key, String value) {
		if ((nodeName != null) && (key != null) && (key.length() > 0)
				&& (value != null)) {
			if ((nodeList != null) && (nodeList.size() > 0)) {
				Iterator it = nodeList.iterator();
				while (it.hasNext()) {
					ConfEntity entity = (ConfEntity) it.next();
					if (entity.getNodeName().equals(nodeName)) {
						ConfEntity confEntity = new ConfEntity();
						Map map = entity.getMap();
						map.remove(key);
						map.put(key, value);
						break;
					}
				}
			}
		}
	}
	/**
	 *  
	 * @param nodeName
	 * @param key
	 * @param value
	 */
	public List<String> listKey(String nodeName) {
		ArrayList<String> nodeLists = new ArrayList<String>();
		if ((nodeList != null) && (nodeList.size() > 0)) {
			Iterator it = nodeList.iterator();
			while (it.hasNext()) {
				ConfEntity entity = (ConfEntity) it.next();
				if (entity.getNodeName().equals(nodeName)) {
					Map map = entity.getMap();
					if ((map != null) && (map.size() > 0)) {
						Iterator tt = map.keySet().iterator();
						while (tt.hasNext()) {
							String key = (String) tt.next();
							nodeLists.add(key);
						}
					}
				}
			}
		}
		return nodeLists;
	}
	public ArrayList getNodeList() {
		return nodeList;
	}

	/**
	 * 测试代码
	 */
	public void printNodeList() {
		if ((nodeList != null) && (nodeList.size() > 0)) {
			Iterator it = nodeList.iterator();
			while (it.hasNext()) {
				ConfEntity entity = (ConfEntity) it.next();
				System.out.println("---===========node===========---"
						+ entity.getNodeName());
				Map map = entity.getMap();
				if ((map != null) && (map.size() > 0)) {
					Iterator tt = map.keySet().iterator();
					while (tt.hasNext()) {
						String key = (String) tt.next();
						String value = (String) map.get(key);
						System.out.println(key + "-------->" + value);
					}
				}
			}
		}
	}

}

 

 

ConfEntity.java

package cn.thunderbird.lm.media.util.conf;
import java.util.Map;
public class ConfEntity {
 private String nodeName;
 private Map map;
 public String getNodeName() {
  return nodeName;
 }
 public void setNodeName(String nodeName) {
  this.nodeName = nodeName;
 }
 public Map getMap() {
  return map;
 }
 public void setMap(Map map) {
  this.map = map;
 }

 

Constant.java

package cn.thunderbird.lm.media.util.conf;
public class Constant {
	public static final String E_OprConfigFileError = "读写配置文件失败";
}

 

 

Test.java

 

package cn.thunderbird.lm.media.dao;
import java.util.Iterator;
import java.util.Map;
import cn.thunderbird.lm.media.util.CharacterUtil;
import cn.thunderbird.lm.media.util.conf.Conf;
public class Test {
	private static Conf conf =null;//全局的每次用完清空
	private static String filepath="";
	
	public  void addNode(String nodeName, Map map){
		 nodeName=CharacterUtil.utfToIsso(nodeName);
			 conf=new Conf();
			 conf.importConf(filepath);
			if ((map != null) && (map.size() > 0)) {
				Iterator tt = map.keySet().iterator();
				while (tt.hasNext()) {
					String key = (String) tt.next();
					String value = (String) map.get(key);
					conf.addPropertie(nodeName, key, value);
			}
			conf.exportConf();
			conf=null;
		 }
	}
	 public  void updateNode(String nodeName, Map map){
		 nodeName=CharacterUtil.utfToIsso(nodeName);
			 conf=new Conf();
			 conf.importConf(filepath);
			if ((map != null) && (map.size() > 0)) {
				Iterator tt = map.keySet().iterator();
				while (tt.hasNext()) {
					String key = (String) tt.next();
					String value = (String) map.get(key);
					conf.setProperties(nodeName, key, value);
				}
			}
			conf.exportConf();
			conf=null;
		}
	 //修改某一个属性
	 public  void updateProperty(String nodeName, String key,String value){
		 //nodeName=CharacterUtil.utfToIsso(nodeName);
			 conf=new Conf();
			 conf.importConf(filepath);
			 conf.setProperties(nodeName, key, value);
			 conf.exportConf();
			conf=null;
		}
	 public static void main(String[] args) {
		 Test test=new Test();
		filepath="D:\\conf\\bsidinfo.properties";
		test.updateProperty("test4","bsid","4");
		//其他的方法类似 map就是[]下面的名值对key=value
	}
}

 

分享到:
评论

相关推荐

    Vs Code Vue实现增删改查

    本教程将重点讲解如何使用Visual Studio Code(简称Vs Code)这个强大的代码编辑器来实现Vue项目中的增删改查功能。首先,我们来看看Vue的基本概念。 Vue.js是尤雨溪开发的一个渐进式JavaScript框架,它具有轻量级...

    vue文件源代码增删改查

    在这个"vue文件源代码增删改查"的主题中,我们将深入探讨如何在Vue.js项目中实现CRUD(创建、读取、更新和删除)操作,结合SpringBoot后端服务和数据库交互。 首先,让我们从Vue.js的角度出发。在Vue应用中,CRUD...

    SSH2项目增删改查事例

    在这个"SSH2项目增删改查事例"中,我们可以深入理解如何利用SSH2框架来实现数据库操作的基本功能。 1. **Struts2**:Struts2作为MVC框架,负责处理HTTP请求并分发到相应的Action类,它是业务逻辑的入口。在增删改查...

    学生信息增删改查微信小程序案例(springboot后台).rar

    该压缩包文件“学生信息增删改查微信小程序案例(springboot后台).rar”提供了一个完整的教学示例,用于展示如何使用SpringBoot技术构建微信小程序的后台管理系统,以实现学生信息的管理功能,包括添加、删除、修改和...

    Configuration对properties、xml配置文件的【增删改查】及动态加载

    在`configurationDemo`文件中,可能包含了一个简单的Java应用,该应用展示了如何使用Apache Commons Configuration库进行配置文件的【增删改查】操作以及动态加载。通过运行这个案例,我们可以更直观地理解这些功能...

    ssm简单的增删改查(初学者)

    这个压缩包文件的内容可能是为了帮助初学者理解如何在SSM框架下实现数据库的增删改查操作,其中Oracle作为后端数据库。 首先,我们来详细了解一下SSM框架的组成部分: 1. Spring:这是一个全面的轻量级应用框架,...

    学生管理系统+python+增删改查学习

    在本项目中,"学生管理系统+python+增删改查学习"是一个专为初学者设计的实践项目,旨在帮助学习者掌握Python编程语言,并通过实际操作理解数据库的增删改查(CRUD)操作。这个管理系统是用Python编写的,可以进行...

    MyBatis基本配置和简单的增删改查

    在本教程中,我们将深入探讨MyBatis的基本配置和如何进行简单的增删改查操作。 **1. MyBatis的基本配置** MyBatis的配置文件通常命名为`mybatis-config.xml`,它是整个MyBatis框架的全局配置。以下是一些基本配置...

    Mybatis通用增删改查

    在实际开发中,为了提高代码的复用性和减少重复工作,开发者通常会实现一套通用的增删改查模板,这就是“Mybatis通用增删改查”的概念。 1. **基础 DaoImpl 概念** Dao(Data Access Object)接口是Java中用于...

    struts简易增删改查

    在"struts简易增删改查"这个主题中,我们将探讨如何使用Struts框架来实现一个基本的数据操作功能,包括添加(Add)、删除(Delete)、修改(Update)和查询(Search)数据。这些功能是任何数据库驱动的应用程序的...

    springMVC MyBatis 增删改查+文件上传下载 -mysql

    在本项目中,我们主要探讨的是如何利用SpringMVC和MyBatis这两个流行的技术框架来实现Web应用中的基本功能:增删改查以及文件的上传和下载。这些功能是大多数企业级应用的基础,也是开发者必须掌握的核心技能。下面...

    react实例-增删改查 人员管理系统

    "增删改查"是任何数据管理系统的基石。在React中,我们可以使用事件处理函数来触发这些操作。例如,当用户点击“添加”按钮时,一个handleAdd函数会被调用,负责收集表单数据并将其添加到数据列表中。同样,对于删除...

    SSM实现增删改查

    5. **增删改查操作**:在SSM项目中,常见的增删改查操作对应于数据库的INSERT、DELETE、UPDATE和SELECT语句。例如,UserService中的`addUser()`, `deleteUser()`, `updateUser()`和`getUserById()`方法分别对应这些...

    GridView增删改查学习示例源码

    这个"GridView增删改查学习示例源码"是一个典型的Web应用开发案例,主要展示了如何利用GridView实现数据的添加(Add)、删除(Delete)、修改(Update)和查询(Search)功能。 首先,`Default.aspx`通常是网站的...

    SpringBoot 增删改查实例Demo

    总结,本实例展示了如何在SpringBoot项目中配置并使用MySQL数据库,以及如何通过`JpaRepository`接口实现增删改查功能。无论是使用原生SQL还是`save()`方法,都能灵活地满足各种数据库操作需求。同时,自动创建数据...

    小程序增删改查代码

    本主题聚焦于“小程序增删改查代码”,这意味着我们将探讨如何在小程序中实现数据库的CRUD(Create、Read、Update、Delete)操作。CRUD是数据库管理的基本功能,对于任何应用程序的数据管理都至关重要。 首先,我们...

    wcf+wpf实现增删改查

    本示例主要介绍如何结合这两者来实现数据库的增删改查操作。对于初学者而言,这是一个很好的起点,可以帮助理解服务端与客户端之间的通信以及UI交互。 **WCF简介** WCF是微软提供的一种统一的编程模型,用于创建...

    基于javaee实现对学生信息的增删改查的2种方法

    例如,我们可以创建一个`StudentController`类,包含`addStudent()`, `getStudents()`, `updateStudent()`, `deleteStudent()`等方法,分别对应增、删、改、查的操作。这些方法调用服务层(Service Layer)进行实际...

    Xml完全操作 XML增删改查

    在IT行业中,XML因其结构清晰、可扩展性强的特点,被广泛应用于数据交换、配置文件、Web服务等领域。本文将深入探讨XML的全方面操作,包括创建、解析、修改和查询。 首先,让我们来看看如何创建XML文档。一个基本的...

    swing 写的与数据库的增删改查操作

    读取配置文件是应用程序中常见的一种做法,用于存储如数据库连接信息、应用程序设置等静态数据。在Java中,可以使用Properties类或者第三方库如Apache Commons Configuration来读取和管理配置文件。这样做的好处是...

Global site tag (gtag.js) - Google Analytics