Ответ 1
public static String getPropertyAsString(Properties prop) {
StringWriter writer = new StringWriter();
prop.list(new PrintWriter(writer));
return writer.getBuffer().toString();
}
У меня есть объект 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
вручную?
public static String getPropertyAsString(Properties prop) {
StringWriter writer = new StringWriter();
prop.list(new PrintWriter(writer));
return writer.getBuffer().toString();
}
Кажется, проблема с ответом @Isiu. После этого свойства кода усекаются, например, существует ограничение на длину строки. Правильный способ - использовать такой код:
public static String getPropertyAsString(Properties prop) {
StringWriter writer = new StringWriter();
try {
prop.store(writer, "");
} catch (IOException e) {
...
}
return writer.getBuffer().toString();
}
Это не связано напрямую с вашим вопросом, но если вы просто хотите распечатать свойства для отладки, вы можете сделать что-то вроде этого
properties.list(System.out);
Я не совсем понимаю, что вы пытаетесь сделать, но вы можете использовать метод хранилища свойств класса (OutputStream out, String comments). Из javadoc:
общедоступный магазин void (OutputStream out, Строковые комментарии) бросает IOException
Записывает этот список свойств (пары ключей и элементов) в этой таблице свойств в выходной поток в формате, подходящем для загрузки в таблицу свойств с использованием метода load (InputStream).
Другая функция для печати всех значений поля:
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);
}
}