Объект Java для объекта String

У меня есть объект Java Properties, который загружается из встроенной памяти String, ранее загружаемой в память из фактического файла .properties следующим образом:

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

Утилита fileToString фактически читает текст из файла, а остальная часть кода хранит его в HashMap, называемом propertyFilesCache. Позже я прочитал текст файла из HashMap как String и перезагрузил его в объект Java Properties, например:

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

В этот момент я заменил свое свойство в моем файле свойств в памяти, и я хочу получить текст из объекта Properties, как если бы я читал объект File, как я это делал выше. Есть ли простой способ сделать это, или мне придется перебирать свойства и создавать String вручную?

Ответ 1

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

Ответ 2

Кажется, проблема с ответом @Isiu. После этого свойства кода усекаются, например, существует ограничение на длину строки. Правильный способ - использовать такой код:

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

Ответ 3

Это не связано напрямую с вашим вопросом, но если вы просто хотите распечатать свойства для отладки, вы можете сделать что-то вроде этого

properties.list(System.out);

Ответ 4

Я не совсем понимаю, что вы пытаетесь сделать, но вы можете использовать метод хранилища свойств класса (OutputStream out, String comments). Из javadoc:

общедоступный магазин void (OutputStream out,                  Строковые комментарии)           бросает IOException

Записывает этот список свойств (пары ключей и элементов) в этой таблице свойств в выходной поток в формате, подходящем для загрузки в таблицу свойств с использованием метода load (InputStream).

Ответ 5

Другая функция для печати всех значений поля:

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