2009-10-16 45 views
10

Tôi có một Java Properties đối tượng mà tôi tải từ một trong bộ nhớ String, mà trước đây đã được nạp vào bộ nhớ từ .properties tập tin thực tế như thế này:Java Thuộc tính đối tượng để String

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

Các util fileToString thực sự đọc trong văn bản từ tệp và phần còn lại của mã lưu trữ nó trong một số HashMap được gọi là propertyFilesCache. Sau đó, tôi đọc các văn bản tập tin từ HashMap như một String và tải lại nó thành một Properties đối tượng Java như vậy:

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

Tại thời điểm này, tôi đã thay thế tài sản của tôi trong tập tin thuộc tính trong bộ nhớ của tôi và tôi muốn lấy văn bản từ đối tượng Properties như thể tôi đang đọc một đối tượng File như tôi đã làm ở trên. Có một cách đơn giản để làm điều này hoặc tôi sẽ phải lặp qua các thuộc tính và tạo ra các String bằng tay?

Trả lời

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

này đã làm các trick, cảm ơn! –

+4

Cần lưu ý rằng điều này sẽ _not_ cung cấp cho bạn kết xuất thẳng về các thuộc tính, nghĩa là bạn không thể chỉ cần bật chuỗi đó vào một tệp và tải nó trở lại dưới dạng tệp thuộc tính. Điều này là do đó ** Properties.list() ** phương pháp prepends một tiêu đề vào danh sách: '- danh sách tài sản - ' Nhiều khả năng bạn muốn sử dụng ** Properties.store() * * phương pháp được mô tả trong nhận xét từ nhận xét @joev bên dưới. –

2

Tôi không hoàn toàn hiểu những gì bạn đang cố gắng làm, nhưng bạn có thể sử dụng phương thức lưu trữ của cửa hàng Lớp học (phương pháp OutputStream out, String comments). Từ javadoc:

public void cửa hàng (OutputStream ra, Chuỗi comments) throws IOException

Ghi danh sách tài sản này (cặp khóa và nguyên tố) trong bảng Thuộc tính này cho luồng dữ liệu đầu ra trong một định dạng phù hợp để tải vào bảng Thuộc tính bằng phương thức tải (InputStream).

6

Nó không liên quan trực tiếp đến câu hỏi của bạn nhưng nếu bạn chỉ muốn in ra các thuộc tính cho gỡ lỗi bạn có thể làm một cái gì đó như thế này

properties.list(System.out); 
9

Dường như có một vấn đề với @Isiu câu trả lời . Sau đó mã Thuộc tính được cắt ngắn, giống như có một số giới hạn về độ dài chuỗi. cách thích hợp là sử dụng mã như thế này:

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

Bạn nhận được tiêu đề có dấu thời gian với phương thức đó. – selle

0

chức năng khác để in tất cả các giá trị của một lĩnh vực là:

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); 
    } 
} 
Các vấn đề liên quan