tokuhirom's Blog

java.util.Properties についての雑記。

Java の java.util.Properties のフォーマットでつくられたファイルをつかいたくなるときがあると思います。

そんなときには、Key に空白をふくめられるのかどうかを知りたくなったりするとおもいます。


結論からいうと以下のようになる。

a b=c

を java.util.Properties でよむと "a" => "b=c" がとれる。

a\ b=c

を java.util.Properties でよむと "a b" => "c" がとれる。


Perl で java.util.Properties をよみたいときは Config::Properties をつかえばいいとおもう。 ただ、utf8 => 1 みたいなオプションをわたせなくて不便なので、かなしい。

P-R をだしている。 ref. https://github.com/salva/p5-Config-Properties/pull/2


以下に、動作確認につかった hoge/HelloWorld.java をしるす。

package hoge;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class HelloWorld{  
    public static void main(String [] args) {  
        {
            String configFile = "prop.conf";
            Properties prop = new Properties();
            try {
                prop.load(new FileInputStream(configFile));
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }

            String name = prop.getProperty("name");
            System.out.println("name: " + name);

            String foo_bar = prop.getProperty("foo, bar");
            System.out.println("foo, bar: " + foo_bar);

            String foo_bar2 = prop.getProperty("foo,");
            System.out.println("foo,: " + foo_bar2);

            String a_b = prop.getProperty("a b");
            System.out.println("a b: " + a_b);

            String a = prop.getProperty("a");
            System.out.println("a: " + a);

            String d_e = prop.getProperty("d e");
            System.out.println("d e: " + d_e);

            System.out.println("\n\n");
            prop.list(System.out);
        }

        System.out.println("\n\n==> DAN <==\n");
        {
            Properties prop = new Properties();
            prop.setProperty("a b", "c");
            prop.list(System.out);
            try {
                prop.store(new FileOutputStream("out.conf"), "Hah");
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
        }
    }  
}  

prop.conf の中身は以下のとおり。

name=iyan
foo, bar=baz
a b=c
d\ e=f

出力結果は以下のとおり。

name: iyan
foo, bar: null
foo,: bar=baz
a b: null
a: b=c
d e: f



-- listing properties --
a=b=c
d e=f
name=iyan
foo,=bar=baz


==> DAN <==

-- listing properties --
a b=c

out.conf の中身は以下のようになっている。

#Hah
#Thu Feb 13 14:25:16 JST 2014
a\ b=c