2011-12-21 12 views
1

config.txtという名前の設定ファイルがあります。私はJavaで設定ファイルのいくつかの値を変更したいJava:Javaで設定ファイルの値を簡単に変更する方法は?

IP=192.168.1.145 
PORT=10022 
URL=http://www.stackoverflow.com 

、私は簡単に達成することができますどのよう10045.にポートを言うの?私の試験では

IP=192.168.1.145 
PORT=10045 
URL=http://www.stackoverflow.com 

、私は、すべての行を読み取るためのコードの多くを書くことPORTを見つけるために、オリジナルの10022を削除し、書き換え10045.私のコードは読みダミーとハードである必要があります。 Javaに便利な方法はありますか?

ありがとうございます!

+0

は、この設定のために必要なファイルですか?データベースについてはどうですか? –

+1

ファイルを読む必要があるので、ファイルを1行ずつ読み込み、その行を新しいファイルに書き留めておきましょう。ポートが来たら、変更された値を書き込むことを知っています。 – Zohaib

+0

うん、それで私はとても欲求不満になる。 –

答えて

5

何か短くしたい場合は、これを使用できます。

public static void changeProperty(String filename, String key, String value) throws IOException { 
    Properties prop =new Properties(); 
    prop.load(new FileInputStream(filename)); 
    prop.setProperty(key, value); 
    prop.store(new FileOutputStream(filename),null); 
} 

残念ながら、注文やフィールドやコメントは保存されません。

注文を保存したい場合は、一度に1行ずつ読むことはそれほど悪くありません。


このテストされていないコードは、コメント、空白行および注文を保持します。複数行の値は扱えません。

public static void changeProperty(String filename, String key, String value) throws IOException { 
    final File tmpFile = new File(filename + ".tmp"); 
    final File file = new File(filename); 
    PrintWriter pw = new PrintWriter(tmpFile); 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    boolean found = false; 
    final String toAdd = key + '=' + value; 
    for (String line; (line = br.readLine()) != null;) { 
     if (line.startsWith(key + '=')) { 
      line = toAdd; 
      found = true; 
     } 
     pw.println(line); 
    } 
    if (!found) 
     pw.println(toAdd); 
    br.close(); 
    pw.close(); 
    tmpFile.renameTo(file); 
} 
+0

保存先の順序の解決策は何ですか?自分自身でプログラムを書く必要がありますか? –

1

私は、設定ファイル全体を(おそらく(属性:値)ペアオブジェクトのリストに)読み込み、何らかの処理を行い(結果的に変更を加える)、オリジナルを上書きするあなたが行ったすべての変更とファイル。 - それに応じて読み出された各ペアに名前を付けるようにしてくださいすることと値のペア:

はたとえば、属性を分離するためにString.split("=")を使用し、あなたはラインによって提供されている設定ファイルを読み込むことができます。次に、必要な変更を行い、読み込んだペア(および場合によっては変更したもの)を繰り返し、ファイルに書き戻します。

もちろん、この方法は、設定ファイル内の行数が比較的少なく、その形式を確実に知ることができれば、最も効果的です。

0

設定をロード/保存するには、Propertiesクラスを使用します。次に、値を設定してもう一度保存します。

Properties p = new Properties(); 
p.load(...); 
p.put("key", "value"); 
p.save(...) 

これは簡単で簡単です。

アプリケーションが複数のコンピュータで実行するために拡大縮小する必要のない単一のアプリケーションである場合は、データベースを使用して設定を保存する必要はありません。それは過剰な残虐行為です。しかし、アプリケーションでリアルタイムのコンフィグレーションの変更が必要で、スケーリングが必要な場合は、Redisはconfigを配布して同期を処理するのには非常に効果的です。私はこの目的のためにそれを大成功に使用しました。

+0

ターゲットファイルをどこにロードできますか? –

+0

プロパティファイルは良い考えです。しかし、OPはそれが設定としてのプロパティファイルではなく、テキストファイルであると言っていませんでした。 ip = xx port = xx url = xxとすることができます。今度はip = x.y.z.nのポート番号を変更したいと考えています。ファイル内のキーは一意ではない可能性があります。 – Kent

+0

私はクラスと同じパッケージ(ディレクトリ)にファイルを落としてから、次のようにします:p.load(MyConfigReaderClass.class.getResourceAsStream( "myconfig.txt")); –

0

java.util.Propertiesの使用を検討し、それは負荷(だ)して保存()メソッド。 これは、コメントとファイル内の余分な改行を保持しないことに注意してください。 また、特定の文字をエスケープする必要があります。

関連する問題