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);
}
}
}
Teraz, kiedy:
$ cat /tmp/x.properties
# The date here
foo=bar\:baz
dwukropek jest uciekł z odwrotnym ukośnikiem. W rzeczywistości wszystkie są dwukropkami.
Dziwne jest to, że jeśli wygeneruję plik właściwości ręcznie i , nie "" ucieknie dwukropek, właściwości są również czytane.
Dlaczego więc proces pisania Properties
(tak czy inaczej przy okazji używasz Writer
lub OutputStream
) w ten sposób unikasz dwukropków?
Dla odniesienia: zrobi to samo dla '=', ':', '#' i '!' ([Źródło] (http://grepcode.com/file/repository.grepcode.com/java /root/jdk/openjdk/6-b14/java/util/Properties.java#628)). –
[Ta linia] (http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/Properties.java#364) oznacza, że istnieje różnica zachowania, jeśli dwukropek nie uciekł. –
Ponieważ jest to określone w dokumentacji. – EJP