package
?mytools;

import
?java.io.BufferedReader;
import
?java.io.BufferedWriter;
import
?java.io.FileReader;
import
?java.io.FileWriter;
import
?java.io.IOException;
import
?java.util.regex.Matcher;
import
?java.util.regex.Pattern;


/**?*/
/**
*?這是個配置文件操作類,用來讀取和設置ini配置文件
*?
@author
?由月
*?
@version
?2004-08-18
*/
public
?
final
?
class
?ConfigurationFile?
{

/**?*/
/**
*?從ini配置文件中讀取變量的值
*?
@param
?file?配置文件的路徑
*?
@param
?section?要獲取的變量所在段名稱
*?
@param
?variable?要獲取的變量名稱
*?
@param
?defaultValue?變量名稱不存在時的默認值
*?
@return
?變量的值
*?
@throws
?IOException?拋出文件操作可能出現的io異常
*/
public
?
static
?String?getProfileString(
String?file,
String?section,
String?variable,
String?defaultValue)

throws
?IOException?
{
String?strLine,?value?
=
?
""
;
BufferedReader?bufferedReader?
=
?
new
?BufferedReader(
new
?FileReader(file));
boolean
?isInSection?
=
?
false
;

try
?
{

while
?((strLine?
=
?bufferedReader.readLine())?
!=
?
null
)?
{
strLine?
=
?strLine.trim();
strLine?
=
?strLine.split(
"
[;]
"
)[
0
];
Pattern?p;
Matcher?m;
p?
=
?Pattern.compile(
"
file://[//s*.*//s*//]
"
);
m?
=
?p.matcher((strLine));

if
?(m.matches())?
{
p?
=
?Pattern.compile(
"
file://[//s*
"
?
+
?section?
+
?
"
file://s*//]
"
);
m?
=
?p.matcher(strLine);

if
?(m.matches())?
{
isInSection?
=
?
true
;

}
?
else
?
{
isInSection?
=
?
false
;
}
}
if
?(isInSection?
==
?
true
)?
{
strLine?
=
?strLine.trim();
String[]?strArray?
=
?strLine.split(
"
=
"
);

if
?(strArray.length?
==
?
1
)?
{
value?
=
?strArray[
0
].trim();

if
?(value.equalsIgnoreCase(variable))?
{
value?
=
?
""
;
return
?value;
}
}
?
else
?
if
?(strArray.length?
==
?
2
)?
{
value?
=
?strArray[
0
].trim();

if
?(value.equalsIgnoreCase(variable))?
{
value?
=
?strArray[
1
].trim();
return
?value;
}
}
?
else
?
if
?(strArray.length?
>
?
2
)?
{
value?
=
?strArray[
0
].trim();

if
?(value.equalsIgnoreCase(variable))?
{
value?
=
?strLine.substring(strLine.indexOf(
"
=
"
)?
+
?
1
).trim();
return
?value;
}
}
}
}
}
?
finally
?
{
bufferedReader.close();
}
return
?defaultValue;
}
/**?*/
/**
*?修改ini配置文件中變量的值
*?
@param
?file?配置文件的路徑
*?
@param
?section?要修改的變量所在段名稱
*?
@param
?variable?要修改的變量名稱
*?
@param
?value?變量的新值
*?
@throws
?IOException?拋出文件操作可能出現的io異常
*/
public
?
static
?
boolean
?setProfileString(
String?file,
String?section,
String?variable,
String?value)

throws
?IOException?
{
String?fileContent,?allLine,strLine,?newLine,?remarkStr;
String?getValue;
BufferedReader?bufferedReader?
=
?
new
?BufferedReader(
new
?FileReader(file));
boolean
?isInSection?
=
?
false
;
fileContent?
=
?
""
;

try
?
{


while
?((allLine?
=
?bufferedReader.readLine())?
!=
?
null
)?
{
allLine?
=
?allLine.trim();
if
?(allLine.split(
"
[;]
"
).length?
>
?
1
)
remarkStr?
=
?
"
;
"
?
+
?allLine.split(
"
;
"
)[
1
];
else
remarkStr?
=
?
""
;
strLine?
=
?allLine.split(
"
;
"
)[
0
];
Pattern?p;
Matcher?m;
p?
=
?Pattern.compile(
"
file://[//s*.*//s*//]
"
);
m?
=
?p.matcher((strLine));

if
?(m.matches())?
{
p?
=
?Pattern.compile(
"
file://[//s*
"
?
+
?section?
+
?
"
file://s*//]
"
);
m?
=
?p.matcher(strLine);

if
?(m.matches())?
{
isInSection?
=
?
true
;

}
?
else
?
{
isInSection?
=
?
false
;
}
}
if
?(isInSection?
==
?
true
)?
{
strLine?
=
?strLine.trim();
String[]?strArray?
=
?strLine.split(
"
=
"
);
getValue?
=
?strArray[
0
].trim();

if
?(getValue.equalsIgnoreCase(variable))?
{
newLine?
=
?getValue?
+
?
"
?=?
"
?
+
?value?
+
?
"
?
"
?
+
?remarkStr;
fileContent?
+=
?newLine?
+
?
"
\r\n
"
;

while
?((allLine?
=
?bufferedReader.readLine())?
!=
?
null
)?
{
fileContent?
+=
?allLine?
+
?
"
\r\n
"
;
}
bufferedReader.close();
BufferedWriter?bufferedWriter?
=
new
?BufferedWriter(
new
?FileWriter(file,?
false
));
bufferedWriter.write(fileContent);
bufferedWriter.flush();
bufferedWriter.close();

return
?
true
;
}
}
fileContent?
+=
?allLine?
+
?
"
\r\n
"
;
}
}
catch
(IOException?ex)
{
throw
?ex;

}
?
finally
?
{
bufferedReader.close();
}
return
?
false
;
}
/**?*/
/**
*?程序測試
*/
public
?
static
?
void
?main(String[]?args)?
{
//
String?value?=?Config.getProfileString("sysconfig.ini",?"Option",?"OracleDB",?"default");
//
System.out.println(value);
try
?
{
System.out.println(ConfigurationFile.setProfileString(
"
d:/1.ini
"
,?
"
Settings
"
,?
"
SampSize
"
,?
"
111
"
));

}
?
catch
?(IOException?e)?
{
System.out.println(e.toString());
}
}
}
posted on 2006-08-07 19:10
Crespo 閱讀(2986)
評論(0) 編輯 收藏