57 votes

Barre oblique inverse des propriétés Java

J'utilise Java Properties pour lire un fichier de propriétés. Tout fonctionne bien, mais Propriétés supprime silencieusement les barres obliques inverses.

(c'est à dire)

 original: c:\sdjf\slkdfj.jpg

after: c:sdjfslkdfj.jpg

Comment faire en sorte que les propriétés ne le fassent pas ?

J'utilise le code prop.getProperty(key)

J'obtiens les propriétés d'un fichier et je veux éviter d'ajouter des doubles barres obliques inverses

21voto

CoolBeans Points 11615

Utiliser les doubles barres obliques inverses c:\\sdjf\\slkdfj.jpg

 Properties props = new Properties();
props.setProperty("test", "C:\\dev\\sdk\\test.dat");
System.out.println(props.getProperty("test"));    // prints C:\dev\sdk\test.dat

MISE À JOUR DU CRÉDIT à @ewh ci-dessous. Apparemment, Windows reconnaît les barres obliques. Donc, je suppose que vous pouvez demander à vos utilisateurs de l'écrire avec des barres obliques avant et si vous avez besoin de barres obliques inverses par la suite, vous pouvez effectuer un remplacement. J'ai testé cet extrait ci-dessous et cela fonctionne très bien.

 Properties props = new Properties();
props.setProperty("test", "C:/dev/sdk/test.dat");
System.out.println(props.getProperty("test"));   // prints C:/dev/sdk/test.dat

12voto

EJP Points 113412

Utilisez des barres obliques. Il n'est jamais nécessaire en Java d'utiliser une barre oblique inverse dans un nom de fichier.

2voto

AlexS Points 2072

En plus de la réponse de Bala R, j'ai la solution suivante pour même conserver la sémantique de retour à la ligne des barres obliques inverses à la fin d'une ligne.

Voici mon code :

 private static Reader preparePropertyFile(File file) throws IOException {

    BufferedReader reader = new BufferedReader(new FileReader(file));
    StringBuilder result = new StringBuilder();

    String line;
    boolean endingBackslash = false;

    while ((line = reader.readLine()) != null) {
        line = line.trim();
        if (endingBackslash) {

            // if the line is empty, is a comment or holds a new property
            // definition the backslash found at the end of the previous
            // line is not for a multiline property value.
            if (line.isEmpty()
                    || line.startsWith("#")
                    || line.matches("^\\w+(\\.\\w+)*=")) {

                result.append("\\\\");
            }
        }

        // if a backslash is found at the end of the line remove it
        // and decide what to do depending on the next line.
        if (line.endsWith("\\")) {
            endingBackslash = true;
            line = line.substring(0, line.length() - 1);
        } else {
            endingBackslash = false;
        }
        result.append(line.replace("\\", "\\\\"));
    }
    if (endingBackslash) {
        result.append("\\\\");
    }
    return new StringReader(result.toString());
}

private static Properties getProperties(File file) throws IOException {
    Properties result = new Properties();
    result.load(preparePropertyFile(file));
    return result;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X