0

J'ai un fichier propriété (ab.properties) avec les valeurs suivantes:.valeur ne se correctement défini dans le fichier des propriétés

color = orange,

StoreLocation =/test.json

société = pomme

Je veux modifier la valeur de StoreLocation à C: \ Users \ kumar \ testFiles \ test.json

Dans le code, le fichier est le chemin d'où je lis mon ab.propert Le fichier ies et storelocation1 contient le chemin C: \ Users \ kumar \ testFiles \ test.json (que je veux mettre à jour dans storelocation). voir ci-dessous le code:

try (InputStream in = new FileInputStream(file)) { 
      Properties prop = new Properties(); 
      prop.load(in); 
      in.close(); 
      prop.setProperty("storeLocation", storeLocation1); 
      OutputStream out = new FileOutputStream(file); 
      prop.store(out, null); 
      out.close(); 


     }catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

en utilisant le code ci-dessus, je reçois le résultat ci-dessous:

color = orange,

StoreLocation = C \: \\ Les utilisateurs de la kumar \\ TestFiles \\ test.json

entreprise = pomme

Rapport qualité StoreLocation est mis à jour mais se

je veux C: pas C \:. Quelqu'un peut-il me guider à ce sujet?

+0

"Je veux C: non C:"? Qu'est-ce que ça veut dire? – Ofisora

+0

oups il semble que les caractères backslash ne sont pas pris correctement lorsque j'ai posté cette requête. Je reçois la sortie comme –

+0

storeLocation = C \: \\ Users \\ kumar \\ testFiles \\ test.json –

Répondre

0

Vous pouvez utiliser l'approche suivante dans le fichier de propriété prêt:

public static Properties load(File file) throws IOException { 
    try (BufferedReader in = new BufferedReader(new FileReader(file))) { 
     int pos; 
     String line; 
     Properties properties = new Properties(); 

     while ((line = in.readLine()) != null) { 
      if (!line.startsWith("#")) { 
       if ((pos = line.indexOf('=')) > 0) { 
        String key = line.substring(0, pos).trim(); 
        String val = line.substring(pos + 1).trim(); 
        properties.setProperty(key, val); 
       } 
      } 
     } 

     return properties; 
    } 
} 

Et pour enregistrer le fichier de propriété:

public static Properties store(File file, Properties properties) throws IOException { 
    try (BufferedWriter out = new BufferedWriter(new FileWriter(file, false))) { 
     Enumeration<String> names = (Enumeration<String>)properties.propertyNames(); 

     while (names.hasMoreElements()) { 
      String key = names.nextElement(); 
      String val = properties.getProperty(key); 
      out.write(String.format("%s = %s", key, val)); 
      out.newLine(); 
     } 
    } 

    return properties; 
} 

Dans ce cas, Properties et dans le fichier que vous ge exactement la même chaîne: C: \ Users \ kumar \ testFiles \ test.json. Je ne sais pas comment cela fonctionne avec les symboles d'échappement, mais maybee cet exemple vous donne et idée.

Dans la vraie vie, si j'avais ces exigences, je BuffereReader et passer outre BufferedWriter et utiliser des méthodes standards Properties.load() et Properties.store().

+0

J'ai utilisé votre code, mais je reçois toujours la même sortie. i.e C \: \\ Utilisateurs \\ kumar \\ testFiles \\ test.json –

0

Pour le moment, je me sers ci-dessous solution, qui fonctionne pour moi maintenant:

try (InputStream in = new FileInputStream(file)) { 
     properties prop = new Properties(); 
     prop.load(in); 
     in.close(); 
     prop.setProperty("storeLocation", storeLocation1); 
     OutputStream out = new FileOutputStream(file); 
     prop.store(out, null); 
     out.close(); 


    }catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    updateString(file); 
} 

    public static void updateString(File file) throws IOException { 
     Path path = Paths.get(file.toString()); 
     Charset charset = StandardCharsets.UTF_8; 

     String content = new String(Files.readAllBytes(path), charset); 
     content = content.replace("\\" + ":", ":"); 
     Files.write(path, content.getBytes(charset)); 

    }