⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 configfile.java

📁 导出ORACLE数据库对象DDL语句的程序
💻 JAVA
字号:
/**
 * Created on 2004-9-6
 * @author zhangp
 * 读写配置文件 可用于读写my.cnf文件
 */

/*
使用方法:
1. IniFile file=new IniFile("文件名");
2. 读取和写入:
	string = file.getString("section","item","默认");
	int = file.getInt("section","item",666);
	file.setString("section","item","设置值");
	file.setInt("section","item",666);
3. 保存ini文件 file.save();
4. 判断是否存在某个section
 	file.hasSection("SectionName");
备注:所有操作是大小写敏感的
 */
package com.icbcsdc.ddlexp.pub.util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Vector;


public class ConfigFile {
	private String fileName="";
	private boolean  bFileExist;
	private Vector fileContainer=new Vector();
	/**
	 * @param filename ini文件名
	 */
	public ConfigFile(String filename) {
		super();
		this.fileName=filename;
		boolean read=readConfFile();//打开文件
		//System.out.println("read:"+read);
	}
	public void save(){
		this.writeConfFile();
	}
	public String getString(String Section, String Item, String Value)
	{
		return getFileString(Section, Item, Value);
	}
	public void setString(String Section, String Item, String Value)
	{		
		writeFileString(Section, Item, Value);//保存到FileContainer		
	}
	public int getInt(String Section, String Item, int Value)
	{		
		return Integer.parseInt(getFileString(Section, Item, String.valueOf(Value)));
	}
	public void setInt(String Section, String Item, int Value)
	{
		writeFileString(Section, Item, String.valueOf(Value));//保存到FileContainer		
	}
	/*
	 * 是否包含某个 section
	 */
	public boolean hasSection(String section){
		for(int i=0;i<fileContainer.size();i++){
			String strline=fileContainer.elementAt(i).toString();
			if(strline.charAt(0)=='['){
				if(strline.equals("["+section+"]")){
					return true;
				}
			}			
		}
		return false;
	}
	/*
	 * 返回某个section下面的所有item
	 * 如果没有找到或该section下面没有items则返回 null
	 */
	public String[] getSection(String Section){
		int[] ret=getSectionIndex(Section);
		int start=ret[0];
		int end=ret[1];
		if( (end+start)==0 ) return null; //not found section; or has no items
		String[] result=new String[end-start+1];
		for(int i=start;i<=end;i++){
			result[i-start]=fileContainer.elementAt(i).toString();
		}
		return result;
	}

	/**
	 * 返回所有section的数组
	 * @return
	 */
	public Object[] getAllSection(){
	    Vector v=new Vector();
	    int end=0;
	    int i=0;
	    int iFileLines = fileContainer.size();
		String strline;
		while (i < iFileLines) {
			strline = fileContainer.elementAt(i++).toString();
			if(strline.length()==0) continue;//
			if (strline.charAt(0) == '[') { //查找Section,第一个必须为[
			    end=strline.indexOf("]");
			    if(end>1){
			        v.add( strline.substring(1,end).trim());
			    }
			}
		}	    
	    return v.toArray();
	}
	
	/////////////////////////////////////////////////////////////////////////////
	/*
	 * 读取ini文件到字符串数组
	 * 读取时进行trim操作
	 */
	private boolean readConfFile()
	{
		File confFile=new File(this.fileName);
		bFileExist=confFile.exists();
		if(!bFileExist){
			return false;
		}
		String strline;
		fileContainer.clear();
		//将IniFile文件数据读到FileContainer
		FileReader freader=null;
		try {
			freader = new FileReader(confFile);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			System.exit(1);
		}
		BufferedReader breader=new BufferedReader(freader); 		
		try {
			while((strline=breader.readLine())!=null){
				strline.trim();			
				if((strline.length()>0 ) && (strline.charAt(0) != '#')){//过滤空行,注释行
					fileContainer.add(strline);
				}
				
			}
			breader.close();
			freader.close();
		} catch (IOException e1) {
			e1.printStackTrace();
			System.exit(1);
		}
		return true;
	}
	/*
	 * 写ini文件
	 */
	private boolean writeConfFile(){
		File confFile = new File(this.fileName);
		bFileExist = confFile.exists();
		if (!bFileExist) {
			return false;
		}
		String newline = System.getProperty("line.separator");
		String strline;
		FileWriter fwriter;
		try {
			fwriter = new FileWriter(confFile);
			//将FileContainer写到IniFile文件
			for (int i = 0; i < fileContainer.size(); i++) {
				strline = fileContainer.elementAt(i).toString();
				fwriter.write(strline + newline);
			}
			fwriter.write(newline);
			fwriter.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.exit(1);
		}
		return bFileExist;
	}

	private String getFileString(String Section, String Item, String Value){
		if ((bFileExist == false) || (fileContainer.size() == 0)) {
			return Value; //文件打开出错或文件为空,返回默认值
		}
		int[] ret=getSectionIndex(Section);
		int start=ret[0];
		int end=ret[1];
		if ( (start+end)==0) return Value;//没找到section返回默认值
		for(int i=start;i<=end;i++){
			String strline=fileContainer.elementAt(i).toString();
			int pos=strline.indexOf("=");
			if(pos<0){//没有"=" ;返回Value
				if(Item.equals(strline)) return Value;
			}
			else{
				String str = strline.substring(0, pos).trim();
				if (Item.equals(str)) {
					//找到Item							
					str =strline.substring(pos + 1).trim();
					return str;
				}
			}
		}
		return Value;//没找到Item返回默认值
		
	}

	private void writeFileString(String Section, String Item, String Value)
	{
		int[] ret=getSectionIndex(Section);
		int start=ret[0];
		int end=ret[1];
		if((start+end)==0){
			//找不到Section
			//直接在最后加入Section,Item,Value
			fileContainer.add("["+Section+"]");
			fileContainer.add(Item+"="+Value);		
		}
		else{//查找Item
			for (int i = start; i <= end; i++) {
				String strline = fileContainer.elementAt(i).toString();
				int pos = strline.indexOf("=");
				if (pos < 0) { //没有"=" 
					continue;
				} 
				else {//找到
					String str = strline.substring(0, pos).trim();
					if (Item.equals(str)) {
						//找到Item		
						strline = Item + "=" + Value;
						fileContainer.set(i,strline);	
						return;
					}
				}
			}
			//找不到Item
			String  strline = Item+"="+Value;
			fileContainer.insertElementAt(strline,end+1);
		}	  
		
	}
	/*
	 * 返回某个section下面的items的起始索引和结束索引
	 * int[0]: start
	 * int[1]: end
	 * 如果start==0 && end==0 表示没有找到该section
	 * 如果start==end >0 表示 该section下面没有内容。
	 * 使用方法: for(int i=start;i<=end;i++){}
	 */
	private int[] getSectionIndex(String Section){
		int[] ret={0,0};
		int i = 0;
		int iFileLines = fileContainer.size();
		String strline;
		while (i < iFileLines) {
			strline = fileContainer.elementAt(i++).toString();
			if (strline.charAt(0) == '[') { //查找Section,第一个必须为[
				if (strline.equals("[" + Section + "]")) { //找到Section
					ret[0] = i;
					while (i < iFileLines) {
						strline = fileContainer.elementAt(i++).toString();
						if (strline.charAt(0) == '[') { //如果到达下一个[],即找不到Item
							ret[1] = i - 2; //定位到下一个[]前面
							break;
						}
					}
					if (ret[1] == 0) { //没有找到下一个section
						ret[1] = iFileLines - 1;
					}

				}
			}
		}
		return ret;
	}
	
	public FileDb getFileDb(String section){
		FileDb fileDb = new FileDb();
//		XMLDatabase db=null;
		if(hasSection(section)){
			String[] ret = this.getSection(section);
			
			for(int i=0;i<ret.length;i++){
				String[] tempArr = ret[i].split("=");
				if(tempArr[0].equals("DbName"))
					fileDb.setDbName(tempArr[1]);
				if(tempArr[0].equals("IP"))
					fileDb.setIP(tempArr[1]);
				if(tempArr[0].equals("UserName"))
					fileDb.setUserName(tempArr[1]);
				if(tempArr[0].equals("Port"))
					fileDb.setPort(tempArr[1]);
				if(tempArr[0].equals("Password"))
					fileDb.setPassword(tempArr[1]);
			}
		}else{
			return null;
		}
		return fileDb;
	}

	
	/*
	 * 删除某个section及其下面的item
	 */
	public void removeSection(String section){
	    int[] ret=getSectionIndex(section);
		int start=ret[0];
		int end=ret[1];
		if( (end+start)==0 ) return;
		for(int i=start-1;i<=end;i++){
		    this.fileContainer.remove(start-1);
		}
	}
	
	public static void main(String[] args) {
		ConfigFile file=new ConfigFile("E:\\a.txt");

		String nextsection = "Database1";
		String dbName = "db1";
		String IP = "122.131";
		file.setString(nextsection,"DbName",dbName);
		file.setString(nextsection,"IP",IP);
//		file.save();
		
		nextsection = "Database2";
		dbName = "db2";
		IP = "122.132";
		file.setString(nextsection,"DbName",dbName);
		file.setString(nextsection,"IP",IP);
		file.save();
		
		file.removeSection("Database1");
		file.save();
		
	}
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -