📄 configfile.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 + -