7

プロパティ ファイルにデータを追加すると、既存のコメントが消え、データの順序が変更されます。それを回避する方法を提案してください。

プロパティ ファイル内のデータ (データを追加する前) とコメントは次のとおりです。

# Setting the following parameters 
# Set URL to test the scripts against
App.URL = https://www.gmail.com
# Enter username and password values for the above Test URL
App.Username = XXXX
App.Password = XXXX

次のように、上記のプロパティ ファイルにさらにデータを追加しています。

 public void WritePropertiesFile(String key, String data) throws Exception
{       
    try 
    {
        loadProperties();  
        configProperty.setProperty(key, data);
        File file = new File("D:\\Helper.properties");
        FileOutputStream fileOut = new FileOutputStream(file);
        configProperty.store(fileOut, null);
        fileOut.close();
    } 
    catch (Exception e) 
    {
        e.printStackTrace();
    }
}

上記の関数を次のように呼び出します。

help.WritePropertiesFile("appwrite1","write1");
help.WritePropertiesFile("appwrite2","write2");
help.WritePropertiesFile("appwrite3","write3");

データは正常に追加されましたが、以前に入力したコメントが消え、データの順序も変更され、プロパティ ファイル (データを追加した後) は次のように表示されます。

#Tue Jul 02 11:04:29 IST 2013
App.Password=XXXX
App.URL=https\://www.gmail.com
appwrite3=write3
appwrite2=write2
appwrite1=write1
App.Username=XXXX

データを最後に追加したい、順序を変更したくない、以前に入力したコメントを削除したくない。私の要件を実装することが可能かどうか教えてください。

4

3 に答える 3

10

私は最近同じ問題に遭遇し、StackOverflow で次の回答を見つけました: https://stackoverflow.com/a/565996/1990089。Apache Commons Configuration API を使用してプロパティ ファイルを処理することをお勧めします。これにより、コメントと空白を保持できます。ただし、これはまだ自分で試していません。

于 2013-07-02T06:14:52.330 に答える
3

プロパティ ファイルのコメントを保存するのは簡単ではありません。コメントを処理する java.util.Properties のメソッドはありません。ファイルを読み取るとき、コメントは単純に無視されます。properties.load を実行するとキーと値のペアのみが読み込まれるため、保存するとコメントが失われます。以下のリンクを確認してください。必要なものを達成するための解決策が1つありますが、エレガントな方法ではありません。

http://www.dreamincode.net/forums/topic/53734-java-code-to-modify-properties-file-and-preserve-comments/

于 2013-07-02T05:45:39.423 に答える
1

プロパティ ファイルからコンテンツを削除したくない場合。ファイルから文字列を読み取って置き換えるだけです。

    String file="D:\\path of your file\abc.properties";     
    Path path = Paths.get(file);
    Charset charset = StandardCharsets.UTF_8;

    String content = new String(Files.readAllBytes(path), charset);
    content = content.replaceAll("name=anything", "name=anything1");
    Files.write(path, content.getBytes(charset));

上記のコードは、ファイルからコンテンツを削除しません。ファイルのコンテンツの一部を置き換えるだけです。

于 2017-06-16T07:13:56.637 に答える