2009-10-16 18 views
10

Mam Java Properties obiekt, który załadować z in-memory String, który był poprzednio załadowany do pamięci od rzeczywistego .properties pliku tak:Właściwości Java obiektu String

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

utylizacji o fileToString faktycznie czyta w tekście z pliku i reszta kodu przechowuje go w HashMap o nazwie propertyFilesCache. Później, czytam tekst pliku z HashMap jako String i załaduj go w Java Properties obiektu tak:

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); 

W tym momencie mam wymienić moją własność w moim pliku nieruchomości wpuszczony w pamięci i chcę uzyskać tekst z obiektu Properties tak, jakbym czytał obiekt File, tak jak zrobiłem to wyżej. Czy istnieje prosty sposób na zrobienie tego lub czy będę musiał powtórzyć właściwości i ręcznie utworzyć String?

Odpowiedz

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

To załatwiło sprawę, dzięki! –

+4

Warto zauważyć, że nie spowoduje to bezpośredniego renderowania właściwości, tzn. Nie można po prostu wyskoczyć tego ciągu do pliku i wczytać go jako plik właściwości. Dzieje się tak dlatego, że metoda ** Properties.list() ** dodaje nagłówek do listy: '- Właściwości aukcji -' Bardziej prawdopodobne jest, że chcesz użyć właściwości ** Properties.store() * * Metoda opisana w komentarzu do komentarza @joev poniżej. –

2

Nie do końca rozumiem, co próbujesz zrobić, ale możesz użyć klasy "store (OutputStream out, String comments). Z javadoc:

public void możliwy (OutputStream out, komentarze String) rzuca IOException

Zapisuje tej listy własności (podstawowe i elementów parach) w tej tabeli właściwości do strumienia wyjściowego w formacie odpowiednim do załadowania do tabeli Właściwości za pomocą metody load (InputStream).

6

To nie jest bezpośrednio związane z pytaniem, ale jeśli chcesz po prostu wydrukować właściwości debugowania można zrobić coś takiego

properties.list(System.out); 
9

Wydaje się, że problem z @Isiu odpowiedź . Po tym kodzie właściwości są obcinane, tak jak istnieje pewien limit długości łańcucha. Właściwym sposobem jest użycie kodu:

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

Otrzymujesz nagłówek z datownikiem za pomocą tej metody. – selle

0

Inną funkcją, aby wydrukować wszystkie wartości pola jest:

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); 
    } 
} 
Powiązane problemy