public final class Test
{
public static void main(final String... args)
throws IOException
{
final Properties properties = new Properties();
properties.setProperty("foo", "bar:baz");
// Yeah, this supposes a Unix-like system
final Path path = Paths.get("/tmp/x.properties");
try (
// Requires Java 8!
final Writer writer = Files.newBufferedWriter(path);
) {
properties.store(writer, null);
}
}
}
Ora, quando:
$ cat /tmp/x.properties
# The date here
foo=bar\:baz
il colon è cavata con una barra inversa. In effetti, tutti i due punti sono.
La cosa strana è che se si genera un file di proprietà a mano e non "escape" i due punti, le proprietà vengono lette altrettanto bene.
Quindi, perché il processo di scrittura di Properties
(questo è il caso se si utilizza un modo Writer
o OutputStream
) di escape in questo modo?
Per riferimento: farà anche lo stesso per '=', ':', '#' e '!' ([Fonte] (http://grepcode.com/file/repository.grepcode.com/java /root/jdk/openjdk/6-b14/java/util/Properties.java#628)). –
[Questa riga] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Properties.java#364) implica che c'è una differenza di comportamento se i due punti non sono sfuggiti. –
Perché è specificato ciò che si verifica nella documentazione. – EJP