2016-09-23 10 views
-1

私はたくさん試しましたが、解決策を見つけることができませんでした。パッケージ内のすべてのプロパティファイルを取得し、javaを使用してキー値を更新する方法は?

| 
|--src/main/resouces 
     | 
     |-updatePropertiesFile.java 
     |-xyz_en_US.properties 
     |-xyz_en_AF.properties 
     |-xyz_en_AE.properties 

これは私のプロジェクト構造です。

すべてのプロパティファイルのキーを更新するためにupdatePropertiesFileクラスがあります。私は約200のプロパティファイルを持っています。

私が必要とするのは、これらすべてのプロパティファイルの特定のキーを更新するメソッドを作成する必要があるということです。手動での変更はそれほど実用的ではありません。私はこのfuntionalityを行うアプリケーションを書く必要があります。

私はresoucebundleメカニズムを使って試しました。しかし、リソースバンドルを使用すると、1つのプロパティファイルしか取得できません。私はResourceBundle.getBundle(String,Locale)ResourceBundle.getBundle(String)の方法を試しました。

これらのプロパティファイルとキーの更新によって、繰り返しが必要です。

私の最初の問題は修正されました。

私はこれをやった:

File[] files = new File("src/main/resources").listFiles(); 
    for (File file : files) { 
    if (file.getName().endsWith("properties")) { 
    //my logic 
    } 

しかし、私はこれをしなかったときに、プロパティファイル内の私のコメントは削除されましたし、順序が変更されました。私はキーとコメントの順序をプロパティファイルにも保つようにしています。

public static class LinkedProperties extends Properties { 
     private final HashSet<Object> keys = new LinkedHashSet<Object>(); 

     public LinkedProperties() { 
     } 

     public Iterable<Object> orderedKeys() { 
      return Collections.list(keys()); 
     } 

     public Enumeration<Object> keys() { 
      return Collections.<Object>enumeration(keys); 
     } 

     public Object put(Object key, Object value) { 
      keys.add(key); 
      return super.put(key, value); 
     } 
    } 

をしかし、これはプロパティファイル内のキーと値のペアのいくつかの変更を引き起こした:私は使用してみました秩序を維持するために

。特殊文字が追加されました。

置き換える・イン・パス機能があり外にコメントや順序

+1

リソースではなくファイルとして読み込みます。 Javaのリソースを更新することは不可能です。 – talex

+0

すべてのファイルが同じフォルダに保存されているので、これはなぜ難しいのですか?各ファイルを読み込み、内容をメモリに保存し、必要なキーを更新してファイルを書き戻します。 – Ironluca

答えて

3

すべてのJava IDEを維持するために私を助けてください。崇高なテキスト、VSコードとAtomもほぼ確実にそうです。 IntelliJは特に優れています。これを行うためのJavaコードを書く必要はありません。それ以外の場合は、同じくらい簡単です:指定されたディレクトリ内のすべてのファイルを超える

File[] files = new File("src/main/resources").listFiles(); 
for (File file in files) { 
    if (file.getName().endsWith("properties")) { 
     //Load and change... 
    } 
} 
+0

これはうまくいきました。ありがとうございました。しかしもう一つ問題があります。私がこれを好きにしたとき、私のプロパティファイルのコメントが削除され、キーの順序が変更されました。しかし、私はそれらの変更を望んでいない。私はコメントが欲しかったし、注文を維持する必要もある。 –

2

このコード反復処理し、各.propertiesファイルを開きます。変更された値が適用され、ファイルが再び保存されます。

public void changePropertyFilesInFolder(File folder) { 
    for(File file : folder.listFiles()) { 
     if(file.isRegularFile() && file.getName().endsWith(".properties")) { 
      Properties prop = new Properties(); 
      FileInputStream instream = new FileInputStream(file); 
      prop.load(instream); 
      instream.close(); 
      prop.setProperty("foo", "bar"); // change whatever you want here 
      FileOutputStream outstream = new FileOutputStream(file); 
      prop.store(outstream, "comments go here"); 
      outstream.close(); 
     } 
    } 
} 
+0

これは機能しました。ありがとうございました。しかしもう一つ問題があります。私がこれを好きにしたとき、私のプロパティファイルのコメントが削除され、キーの順序が変更されました。しかし、私はそれらの変更を望んでいない。私はコメントが欲しかったし、注文を維持する必要もある –

+1

@JinceMartin残念なことに、Javaの 'Properties'クラスはコメントと注文の両方を含む' .properties'ファイルのフォーマットを処理するために作られていません。可能な選択肢については、[この質問](https://stackoverflow.com/questions/565932/a-better-class-to-update-property-files)を参照してください。 – Hexaholic

+0

ok tahnk you。これを試してみましょう –

関連する問題