1

personHashMap.serHashMap を含むファイルを取得します。これを作成するコードは次のとおりです。

String file_path = ("//releasearea/ToolReleaseArea/user/personHashMap.ser");
public void createFile(Map<String, String> newContent) {
    try{
        File file = new File(file_path);

        FileOutputStream fos=new FileOutputStream(file);
        ObjectOutputStream oos=new ObjectOutputStream(fos);

        oos.writeObject(newContent);
        oos.flush();
        oos.close();
        fos.close();

    }catch (Exception e){
        System.err.println("Error in FileWrite: " + e.getMessage());
    }

}

今、私は、プログラムが実行されているときに、personHashMap.ser 変更されたコンテンツのみでファイルを 5 分間更新することを望んでいます。だから私が呼んだ方法:

public void updateFile(Map<String, String> newContent) {
    Map<String, String> oldLdapContent = readFile();
    if(!oldLdapContent.equals(ldapContent)){ // they arent the same, 
                                             // so i must update the file

    }   

}

しかし今、私はそれをどのように実現できるかについての考えがありません。
また、新しいコンテンツのみを更新する方がパフォーマンスが良いですか、それともファイル全体を消去して新しいリストを再度挿入する必要がありますか?

あなたが私を助けてくれることを願っています..

編集:

HashMap には ie が含まれstreet=Example Streetます。
しかし今、新しい通りはNew Example Street. ここで、ファイル内の HashMap を更新する必要があります。そのため、新しいコンテンツを追加することはできません...

4

3 に答える 3

2

まずHashMap、本当に適切な選択ではありません。シリアル化ではなく、メモリ内で使用するように設計されています (もちろん、標準的な方法でシリアル化できます)。しかし、それが 2kb だけの場合は、更新されたデータではなく全体を書き込んでください。

第二に、このかなり些細な方法のパフォーマンスについて過度に心配しているようです (2kb の場合、書き込みには数ミリ秒しかかかりません)。一貫性と並行性の問題についてもっと心配します。JavaDB や h2 などの軽量データベースの使用を検討することをお勧めします。

于 2012-10-08T09:44:25.190 に答える
0

updateFileメソッドをループで呼び出してから、 sleepを 5 分間 (5*60*1000 ミリ秒)呼び出すことができます。

Thread.Sleep(300000); // sleep for 5 minutes

既存のファイルに追加するには、次を使用できます。

FileOutputStream fooStream = new FileOutputStream(file, true);
于 2012-10-08T09:15:33.850 に答える
0

コンストラクターを使用しFileOutputStream(File file, boolean append)、 を に設定boolean appendtrueます。既存のファイルにテキストを追加します。

于 2012-10-08T09:27:15.197 に答える