25

みんなの記憶をかき立てるために、Java には「.properties」という拡張子が付いたこれらのファイルがあります。これらのファイルは基本的に、キーと値のペアでいっぱいの ASCII テキスト ファイルです。フレームワークには、そのファイルを (本質的に) ファンシーなハッシュマップに吸い込むための非常に簡単な方法がいくつかあります。

(私が見ているように) 2 つの大きな利点は、手作業による編集と読み書きの両方が非常に簡単なことです。

.NET には同等の機能が組み込まれていますか? もちろん、XML ファイルでも同じことができますが、私が言っていることがわかっているのであれば、山かっこをすべて手で入力する必要はありません。また、すべてのデータをメモリ内のデータ構造に 1 行で吸い込む方法も便利です。

(サイドバー: まだここで質問されていないことが信じられませんが、そのような質問は見つかりませんでした。)

編集:

いくつかのコメントが示唆する質問に答えるために、.NET で Java .properties ファイルを具体的に読み取る方法を探しているわけではありません。.NET ユニバースで機能的に同等のものを探しています。(そして、これが私たちが話している .NET であることを明らかに忘れていたので、XML ベースではないことを望んでいました。)

そして、構成ファイルは近いですが、アプリの構成情報ではなく、任意の文字列を保存する方法が必要なので、構成ファイルの焦点と設計はベースから外れているように見えました.

4

6 に答える 6

8

.NET の方法は、構成ファイルを使用することです。.NET フレームワークは 、それらを操作するための API も提供します

于 2010-01-30T22:34:07.140 に答える
5

sourceforge.netで見つけることができるniniと呼ばれるサードパーティのコンポーネントがあります

例:

ニニを使って;
Nini.Config を使用。

名前空間niniDemo{
   パブリッククラスniniDemoClass{
       public bool LoadIni(){
            文字列 configFileName = "demo.ini";
            IniConfigSource configSource = new IniConfigSource(configFileName);

            IConfig demoConfigSection = configSource.Configs["デモ"];
            string demoVal = demoConfigSection.Get("demoVal", string.Empty);
       }
   }

}

上記のサンプルの「demo.ini」ファイルは次のようになります。

[デモ]
demoVal = フーバー

の値demoValが null または空の場合、デフォルトは になりstring.Emptyます。

于 2010-01-30T22:42:46.133 に答える
3

Java の .property ファイルに触発された単純なテキスト ベースのプロパティ ファイルを使用する、 DotNet.Configという小さな .NET 構成ライブラリを作成しました。簡単にロードするためのいくつかの優れた機能が含まれています。ここでコピーを取得できます:

https://github.com/jknight/DotNet.Config

于 2015-10-01T22:54:53.633 に答える
2

C# を使用して、読み取りプロパティ ファイルの同様のソリューションを見つけることができませんでした。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;
    }

私の考え-

個人的には、プロパティ ファイルへのアクセスは、XML ファイルへのアクセスよりもはるかに使いやすいと思います。

そのため、一部の属性プロパティを外部化しようとする場合は、XML よりもプロパティ ファイルを使用する方が適切です。

于 2013-12-09T17:46:26.127 に答える
0

個人的には、Web で見つけたこのコードが気に入っています。これは、プロパティ ファイルを読み書きするためのパーソナライズされた方法です。

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()
于 2013-06-17T15:17:56.230 に答える