Der Stapelüberlauf hat die Frage _ "Kann .NET eine Eigenschaftendatei laden und analysieren, die der Java-Eigenschaftenklasse entspricht?" (Januar 2009) _ Ich frage, wie man die Eigenschaftendatei in C # liest. Es gibt Fälle wie den Fragesteller, die die vorhandene Eigenschaftendatei wie in C # lesen möchten, ohne Änderungen vorzunehmen.
Es gibt einige codierte Antworten auf die Frage, aber keine der Implementierungen ist praktisch, außer meine Antwort. .. Einige fügen sogar Spezifikationen hinzu, die nicht existieren. Behandeln Sie ;
oder '
als Startzeichen der Kommentarzeile oder entfernen Sie die Anführungszeichen um den Eigenschaftswert.
Schließlich bleibt nichts anderes übrig, als es selbst zu machen.
Die Spezifikation der Java-Eigenschaftendatei lautet [java.util.Properties.load (java.io.Reader)](https://docs.oracle.com/javase/9/docs/api/java/util/Properties. Es ist in JavaDoc von HTML # load-java.io.Reader-) </ code> geschrieben. Das Problem ist, dass die Spezifikationen etwas komplizierter sind, als Sie sich vorstellen können. Obwohl nicht erschöpfend, sollten insbesondere die folgenden Punkte berücksichtigt werden.
\ u0020
), Tabulatoren ( \ t
, \ u0009
) und Zeilenvorschübe ( \ f
, \ u000C
).=
wird als Schlüssel / Wert-Trennzeichen verwendet.:
Wird auch als Schlüssel- / Werttrennzeichen verwendet.=
, :
und Leerzeichen auch durch Escapezeichen mit einem Backslash in den Schlüssel eingebettet werden.\ r
und \ n
können auch Zeilenabschlüsse eingeschlossen werden.\ uxxxx
steht für Unicode-Zeichen.Das ist zum Beispiel der Fall, wenn test.properties
den folgenden Inhalt hat:
# A comment line that starts with '#'.
# This is a comment line having leading white spaces.
! A comment line that starts with '!'.
key1=value1
key2 : value2
key3 value3
key\
4=value\
4
\u006B\u0065\u00795=\u0076\u0061\u006c\u0075\u00655
\k\e\y\6=\v\a\lu\e\6
\:\ \= = \\colon\\space\\equal
Es sollte als die folgende Schlüssel-Wert-Paargruppe interpretiert werden.
Schlüssel | Wert |
---|---|
key1 |
value1 |
key2 |
value2 |
key3 |
value3 |
key4 |
value4 |
key5 |
value5 |
key6 |
value6 |
: = |
\colon\space\equal |
NuGet Die im Paket "Authlete.Authlete" enthaltene Klasse "PropertiesLoader" ist die Eigenschaftendatei. Kann die Spezifikationen von interpretieren. Das folgende Codebeispiel
using System;
using System.IO;
using System.Collections.Generic;
using Authlete.Util;
namespace MyApp
{
class Program
{
public static void Main(string[] args)
{
string file = "test.properties";
IDictionary<string, string> properties;
using (TextReader reader = new StreamReader(file))
{
properties = PropertiesLoader.Load(reader);
}
foreach (var entry in properties)
{
Console.WriteLine($"{entry.Key} = {entry.Value}");
}
}
}
}
Erzeugt die folgende Ausgabe.
key1 = value1
key2 = value2
key3 = value3
key4 = value4
key5 = value5
key6 = value6
: = = \colon\space\equal
Hier ist ein ähnlicher Code in Java:
import java.util.*;
import java.io.*;
public class Program
{
public static void main(String[] args) throws IOException
{
String file = "test.properties";
Properties properties = new Properties();
try (Reader reader = new FileReader(file))
{
properties.load(reader);
}
for (Map.Entry<Object, Object> entry : properties.entrySet())
{
System.out.format("%s = %s\n", entry.getKey(), entry.getValue());
}
}
}
Der Quellcode für PropertiesLoader.cs </ code> lautet authlete-csharp Es existiert in (: //github.com/authlete/authlete-csharp). Die Testgruppe xUnit für "PropertiesLoader" lautet außerdem
PropertiesLoaderTest.cs. Es wird in master / Authlete.Tests / Util / PropertiesLoaderTest.cs) </ code> beschrieben.
Recommended Posts