在Java編程中應用正則表達式。本站提示廣大學習愛好者:(在Java編程中應用正則表達式)文章只能為提供參考,不一定能成為您想要的結果。以下是在Java編程中應用正則表達式正文
其別人寫的都是挪用非托管kernel32.dll。我也用過 然則感到兼容性有點欠好 有時刻會湧現編碼毛病,究竟一個是之前的體系一個是如今的體系。咱來寫一個純C#的ini格局設置裝備擺設文件讀取,其實就是文本文件讀寫啦。然則我們要做的毫不僅僅是如許 是為了拜訪操作的便利 更是為了今後的應用。
都曉得ini格局的設置裝備擺設文件裡各個設置裝備擺設項 其實就是一行一行的文本 key跟value 用等號離隔。
像如許:
grade=5 。
各個設置裝備擺設項又停止分組 同類型的放到一路 稱之為section 以中括號([])辨別。
像如許:
[contact]
qq=410910748
website=assassinx.cnblogs.com
[score]
math=85
Chinese=90
geographic=60
各個設置裝備擺設項的key在section內弗成反復。
在這裡我們為了便利 去失落section的概念 ,現實上也用不怎樣到。那末如許一來便可以把個個設置裝備擺設項懂得成一個dictionary構造,便利我們存取等操作 。至於為何必定要應用dictionary 由於在測試時我發明存取進程中他不會打亂元素的寄存次序 暈 就如許啊。 我們要做到就是依據key去取value。還有就是須要留意到我們有時刻須要在設置裝備擺設文件裡寫正文怎樣辦呢?就是以分號(;)開首的行。這個成績我們可以在法式裡為他初始化特別的key+序號的情勢 ,寫入的時刻也異樣的停止斷定。
這全部進程就是:
法式開端時遍歷一切行 假如以分號(;)開首則存儲此行不作為設置裝備擺設說明,假如不是 則說明此行 並放到dictionary聚集裡去。拜訪時 依據key獲得value 就這麼簡略。留意正文行的處置 還有更改設置裝備擺設存歸去行的前後次序必需堅持原樣。
好了開工吧:
public class Config
{
public Dictionary<string, string> configData;
string fullFileName;
public Config(string _fileName)
{
configData = new Dictionary<string,string>();
fullFileName = Application.StartupPath + @"\" + _fileName;
bool hasCfgFile =File.Exists(Application.StartupPath + @"\" + _fileName);
if (hasCfgFile == false)
{
StreamWriter writer = new StreamWriter(File.Create(Application.StartupPath + @"\" + _fileName), Encoding.Default);
writer.Close();
}
StreamReader reader = new StreamReader(Application.StartupPath + @"\" + _fileName, Encoding.Default);
string line;
int indx = 0;
while ((line = reader.ReadLine()) != null)
{
if (line.StartsWith(";") || string.IsNullOrEmpty(line))
configData.Add(";" + indx++, line);
else
{
string[] key_value = line.Split('=');
if (key_value.Length >= 2)
configData.Add(key_value[0], key_value[1]);
else
configData.Add(";" + indx++, line);
}
}
reader.Close();
}
public string get(string key)
{
if (configData.Count <= 0)
return null;
else if(configData.ContainsKey(key))
return configData[key].ToString();
else
return null;
}
public void set(string key, string value)
{
if (configData.ContainsKey(key))
configData[key] = value;
else
configData.Add(key, value);
}
public void save()
{
StreamWriter writer = new StreamWriter(fullFileName,false,Encoding.Default);
IDictionaryEnumerator enu = configData.GetEnumerator();
while (enu.MoveNext())
{
if (enu.Key.ToString().StartsWith(";"))
writer.WriteLine(enu.Value);
else
writer.WriteLine(enu.Key + "=" + enu.Value);
}
writer.Close();
}
}