2009-10-16 2 views
10

Ich habe ein Java Properties Objekt, das ich von einer String im Speicher zu laden, die zuvor in dem Speicher von der tatsächlichen .properties Datei wie folgt geladen:Java Properties-Objekt String

this.propertyFilesCache.put(file, FileUtils.fileToString(propFile)); 

Die util fileToString tatsächlich lesen im Text aus der Datei und der Rest des Codes speichert es in einem HashMap namens propertyFilesCache. Später habe ich die Datei Text aus dem HashMap als String lesen und es in ein Objekt neu laden Java Properties etwa so:

String propFileStr = this.propertyFilesCache.get(fileName); 
Properties tempProps = new Properties(); 
try { 
    tempProps.load(new ByteArrayInputStream(propFileStr.getBytes())); 
} catch (Exception e) { 
    log.debug(e.getMessage()); 
} 
tempProps.setProperty(prop, propVal); 

An diesem Punkt habe ich mein Eigentum in meiner In-Memory-Property-Datei und ich ersetzt Ich möchte den Text vom Objekt Properties bekommen, als ob ich ein File Objekt lesen würde, wie ich es oben getan habe. Gibt es eine einfache Möglichkeit, dies zu tun, oder muss ich über die Eigenschaften iterieren und die String manuell erstellen?

Antwort

22
public static String getPropertyAsString(Properties prop) {  
    StringWriter writer = new StringWriter(); 
    prop.list(new PrintWriter(writer)); 
    return writer.getBuffer().toString(); 
} 
+0

Dieser der Trick, danke! –

+4

Es ist erwähnenswert, dass dies _nicht_ Ihnen eine direkte Darstellung der Eigenschaften zurückgibt, d. H. Sie können diese Zeichenfolge nicht einfach in eine Datei einfügen und sie als Eigenschaftendatei zurückladen. Dies liegt daran, dass die Methode ** Properties.list() ** der Liste einen Header voranstellt: '- Eigenschaften auflisten -' Wahrscheinlicher, dass Sie den ** Properties.store() * verwenden möchten. * Methode beschrieben im Kommentar von @joev Kommentar unten. –

2

Ich verstehe nicht vollständig, was Sie versuchen zu tun, aber Sie können die Methode der Methode 'store (OutputStream out, String comments) von Properties' verwenden. Vom javadoc:

public void Speicher (Outputstream out, String Kommentare) throws IOException

Schreibt diese Eigenschaftsliste (Schlüssel und Elementpaare) in dieser Tabelle Eigenschaften mit dem Ausgangsstrom in einem geeigneten Format zum Laden in eine Properties-Tabelle mit der Methode load (InputStream).

6

Es ist auf Ihre Frage nicht direkt, aber wenn Sie nur Objekte drucken möchten aus für das Debuggen Sie so etwas wie dieses

properties.list(System.out); 
9

tun können, scheint es ein Problem mit @Isiu Antwort zu sein . Danach werden die Eigenschaften des Codes gekürzt, so dass die Länge der Zeichenkette begrenzt ist. Die richtige Art und Weise ist der Code wie folgt zu verwenden:

public static String getPropertyAsString(Properties prop) { 
    StringWriter writer = new StringWriter(); 
    try { 
     prop.store(writer, ""); 
    } catch (IOException e) { 
     ... 
    } 
    return writer.getBuffer().toString(); 
} 
+1

Sie erhalten einen Header mit einem Zeitstempel mit dieser Methode. – selle

0

Eine weitere Funktion alle Werte eines Feldes zu drucken ist:

public static <T>void printFieldValue(T obj) 
{ 
    System.out.printf("###" + obj.getClass().getName() + "###"); 
    for (java.lang.reflect.Field field : obj.getClass().getDeclaredFields()) { 
     field.setAccessible(true); 
     String name = field.getName(); 
     Object value = null; 
     try{ 
      value = field.get(obj); 
     }catch(Throwable e){} 
     System.out.printf("#Field name: %s\t=> %s%n", name, value); 
    } 
}