不。净具有等同Java的。性文件?
-
24-09-2019 - |
题
慢跑每个人的记忆、Java有这些文件的延伸"。性",这基本上是一个ASCII码文本文件的全的关键值对。该框架有一些非常简单的方法来吸该文件到(基本)一个奇特哈希.
两大优势(因为我看到它)被极端易的两个方面编辑和读写。
不。网具有同等烤的吗?当然,我可以做同样的用XML文件,但我宁愿没有到手类型的所有这些角括号内,如果你知道我什么意思。此外,一种方式来吸的所有数据并入一个数据结构中存在一种线路是很好的。
(栏:我不能相信这没问已经在这里,但是我不能找到这样一个问题。)
编辑:
要回答这个问题隐含的一些评论,我不是在寻找一种方式向具体读java。属性文件之下。净,我正在寻找的功能等同的。净的宇宙。(我希望它不会基于XML,具有显然忘记了,这是。净我们是在谈论。)
而且,虽然配置文件 靠近, 我需要的方式储存的一些任意字符串,不应用程序配置的信息,所以重点和设计的配置文件似乎关闭基地。
解决方案
你可以实现一个类似的功能性文件,使用建立在 设置文件 (在VS,添加一个新的"设置文件"),但它仍然是基于XML的。
你可以访问的设置使用自动生成的设置类,甚至更新它们与拯救他们回到的配置文件都没有编写任何样板的代码。设置强的类型,并可以被指定为"用户"(保存用户的应用程序的数据文件夹)或"应用"(保存的同一个文件夹中的运行exe)。
其他提示
有被称为妮妮第三者组分,其可以在 sourceforge.net
有关的示例:
using Nini; using Nini.Config; namespace niniDemo{ public class niniDemoClass{ public bool LoadIni(){ string configFileName = "demo.ini"; IniConfigSource configSource = new IniConfigSource(configFileName); IConfig demoConfigSection = configSource.Configs["Demo"]; string demoVal = demoConfigSection.Get("demoVal", string.Empty); } } }
在上面的示例的 'demo.ini' 文件将是:
[Demo] demoVal = foobar
如果demoVal
的值是空值或空白,则默认为string.Empty
。
我没有能够通过使用C#找到所读取属性文件一个similer溶液。我能够使用C#编写自己的代码,得到相同的结果,相同的Java。
请是代码:
// watchValue- Property attribute which you need to get the value;
public string getProperty(string watchValue)
{
// string propertiesfilename= @"readFile.properties";
string[] lines = System.IO.File.ReadAllLines(propertiesfilename);
for (int i = 0; i < lines.Length; i++)
{
string prop_title = Regex.Split(lines[i], "=")[0].Trim();
if (prop_title == watchValue)
return Regex.Split(lines[i], "=")[1].Trim();
}
return null;
}
我Idea-
我个人认为,属性文件访问更加方便用户不是访问XML文件。
所以,如果你尝试一些外部化属性属性更好地使用属性文件比XML。
我已经写了名为 DotNet.Config 小.NET配置库,它使用简单的文本基于属性文件的灵感来自Java的.property文件。它包括便于装载一些不错的功能。你可以在这里抢复制:
我个人这样一段代码我在Web上找到。它是读取personnalized方式/写在属性文件中。
public class Properties
{
private Dictionary<String, String> list;
private String filename;
public Properties(String file)
{
reload(file);
}
public String get(String field, String defValue)
{
return (get(field) == null) ? (defValue) : (get(field));
}
public String get(String field)
{
return (list.ContainsKey(field))?(list[field]):(null);
}
public void set(String field, Object value)
{
field = this.trimUnwantedChars(field);
value = this.trimUnwantedChars(value);
if (!list.ContainsKey(field))
list.Add(field, value.ToString());
else
list[field] = value.ToString();
}
public string trimUnwantedChars(string toTrim)
{
toTrim = toTrim.Replace(";", string.Empty);
toTrim = toTrim.Replace("#", string.Empty);
toTrim = toTrim.Replace("'", string.Empty);
toTrim = toTrim.Replace("=", string.Empty);
return toTrim;
}
public void Save()
{
Save(this.filename);
}
public void Save(String filename)
{
this.filename = filename;
if (!System.IO.File.Exists(filename))
System.IO.File.Create(filename);
System.IO.StreamWriter file = new System.IO.StreamWriter(filename);
foreach(String prop in list.Keys.ToArray())
if (!String.IsNullOrWhiteSpace(list[prop]))
file.WriteLine(prop + "=" + list[prop]);
file.Close();
}
public void reload()
{
reload(this.filename);
}
public void reload(String filename)
{
this.filename = filename;
list = new Dictionary<String, String>();
if (System.IO.File.Exists(filename))
loadFromFile(filename);
else
System.IO.File.Create(filename);
}
private void loadFromFile(String file)
{
foreach (String line in System.IO.File.ReadAllLines(file))
{
if ((!String.IsNullOrEmpty(line)) &&
(!line.StartsWith(";")) &&
(!line.StartsWith("#")) &&
(!line.StartsWith("'")) &&
(line.Contains('=')))
{
int index = line.IndexOf('=');
String key = line.Substring(0, index).Trim();
String value = line.Substring(index + 1).Trim();
if ((value.StartsWith("\"") && value.EndsWith("\"")) ||
(value.StartsWith("'") && value.EndsWith("'")))
{
value = value.Substring(1, value.Length - 2);
}
try
{
//ignore duplicates
list.Add(key, value);
}
catch { }
}
}
}
}
使用示例:
//load
Properties config = new Properties(fileConfig);
//get value whith default value
com_port.Text = config.get("com_port", "1");
//set value
config.set("com_port", com_port.Text);
//save
config.Save()