2009-10-16 6 views
10

J'ai un objet Java Properties que je charge d'un en mémoire String, qui a déjà été chargé dans la mémoire à partir du fichier .properties réel comme celui-ci:objet Java Propriétés à chaîne

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

Le util fileToString lit en fait dans le texte du fichier et le reste du code stocke dans un HashMap appelé propertyFilesCache. Plus tard, je lis le texte de fichier à partir du HashMap comme String et le recharger dans un objet Java Properties comme ceci:

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

À ce stade, je l'ai remplacé ma propriété dans mon dossier de propriété en mémoire et je Je veux obtenir le texte de l'objet Properties comme si je lisais un objet File comme je l'ai fait ci-dessus. Existe-t-il un moyen simple de le faire ou vais-je devoir itérer sur les propriétés et créer le String manuellement?

Répondre

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

Ce fait le tour, merci! –

+4

Il est à noter que ceci ne vous donnera pas un rendu rectiligne des propriétés, c'est-à-dire que vous ne pouvez pas simplement sortir cette chaîne dans un fichier et la recharger en tant que fichier de propriétés. En effet, que ** Properties.list() ** méthode prepends un en-tête sur la liste: '- propriétés liste --' Plus probable que vous voudriez utiliser le ** Properties.store() * * méthode décrite dans le commentaire de commentaire @joev ci-dessous. –

2

Je ne comprends pas complètement ce que vous essayez de faire, mais vous pouvez utiliser la méthode 'store (OutputStream out, String comments)' de la classe Properties. De l'javadoc:

magasin public void (OutputStream out, commentaires String) throws IOException

Ecrit cette liste de propriété (paires de clés et éléments) dans ce tableau Propriétés dans le flux de sortie dans un format approprié pour le chargement dans une table de propriétés à l'aide de la méthode load (InputStream).

6

Il est pas directement lié à votre question, mais si vous voulez juste imprimer des propriétés pour le débogage, vous pouvez faire quelque chose comme ça

properties.list(System.out); 
9

Il semble y avoir un problème avec la réponse @Isiu . Après ce code, les propriétés sont tronquées, comme s'il y avait une limite à la longueur de la chaîne. Une bonne façon est d'utiliser le code comme ceci:

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

Vous obtenez un en-tête avec un horodatage avec cette méthode. – selle

0

Une autre fonction pour imprimer toutes les valeurs d'un champ est:

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