2

実行時にプロパティ ファイル内の値を設定することは可能ですか。

これを試してみたところ、プロパティを読み込んでいるときに変更されますが、ファイルをチェックインすると変更が反映されません。

       try {
            Properties props = new Properties();
            props.setProperty("ServerAddress", "ee");
            props.setProperty("ServerPort", "123");
            props.setProperty("ThreadCount", "456");
            File f = new File("myApp.properties");

            OutputStream out = new FileOutputStream( f );
            props.store(out, "This is an optional header comment string");

            System.out.println(props.get("ServerPort"));
            out.close();
       }
        catch (Exception e ) {
            e.printStackTrace();
        }

出力: 123.

私の必要性は、アプリケーション全体で 1 つのプロパティ ファイルを用意し、GUI Web ページを介して構成を変更できるようにすることです。

4

1 に答える 1

5

問題の一部は、そのコードを実行するたびに現在存在するファイルを上書きしていることだと思います。必要なことは、現在存在するプロパティを Properties オブジェクトに読み込み、変更が必要なプロパティの値を変更し、最後にそれらのプロパティを保存することです。このようなもの:

OutputStream out = null;
        try {

            Properties props = new Properties();

            File f = new File("myApp.properties");
            if(f.exists()){

                props.load(new FileReader(f));
                //Change your values here
                props.setProperty("ServerAddress", "ThatNewCoolValue");
            }
            else{

                //Set default values?
                props.setProperty("ServerAddress", "DullDefault");
                props.setProperty("ServerPort", "8080");
                props.setProperty("ThreadCount", "456");

                f.createNewFile();
            }



            out = new FileOutputStream( f );
            props.store(out, "This is an optional header comment string");

            System.out.println(props.get("ServerPort"));

       }
        catch (Exception e ) {
            e.printStackTrace();
        }
        finally{

            if(out != null){

                try {

                    out.close();
                } 
                catch (IOException ex) {

                    System.out.println("IOException: Could not close myApp.properties output stream; " + ex.getMessage());
                    ex.printStackTrace();
                }
            }
        }

最初の実行後の結果:

  #This is an optional header comment string
  #Thu Feb 28 13:04:11 CST 2013
  ServerPort=8080
  ServerAddress=DullDefault
  ThreadCount=456

2 回目の実行 (およびその後の各実行) 後の結果:

  #This is an optional header comment string
  #Thu Feb 28 13:04:49 CST 2013
  ServerPort=8080
  ServerAddress=ThatNewCoolValue
  ThreadCount=456
于 2013-02-28T19:08:29.120 に答える