0

codenameone アプリケーションにストレージ ファイルを追加しました。場合によっては、特定のストレージ ファイルを削除し、古いフィルター処理されたデータと新しいデータを使用して再作成したいと考えています。削除するとうまくいきません。

まず、StorageManager クラスでストレージ ファイルをクリアするためのメソッドを作成します。

public void clearData(String pStorageTable){
    Storage.getInstance().deleteStorageFile(pStorageTable);
}

他のクラスでは、このメソッドを次のように使用します。

// load all data of specific storage file
// ...

new DBManager().clearData(ThreeTrans.DB_NAME);

// write old data with filtering of specific ID and new data
// ...

データの書き込み方法は次のとおりです。

public void write(ThreeTrans pTT){
    if(store == null) {
        store = Storage.getInstance();
    }

    DB_NAME = "TT";

    if(!store.exists(DB_NAME)) {
        Hashtable depHash = new Hashtable();
        String k = "1" + pTT.getNumber();
        depHash.put(k, pTT.toString());
        store.writeObject(DB_NAME, depHash);
    }
    else {
        Hashtable depHash = (Hashtable)store.readObject(DB_NAME);

        if (!depHash.containsValue(pTT.getNumber())) {
            String k = String.valueOf(getLastKeyNumber());
            depHash.put(k, pTT.toString());
            store.writeObject(DB_NAME, depHash);
        }
    }
}

最初は、ストレージファイルを削除するためにこの方法を使用していました:

public void clearData(String pStorageTable){
    if(store == null) {
        store = Storage.getInstance();
    }

    for (String str : store.listEntries()) {
        if(str.toLowerCase().startsWith(pStorageTable)) {
           store.deleteStorageFile(str);
        }
    }
}

この問題の後、この方法はこれに変更されました。

public void clearData(String pStorageTable){
    Storage.getInstance().deleteStorageFile(pStorageTable);
}
4

1 に答える 1

0

ファイルを操作する出力ストリームまたは入力ストリームで close() を呼び出さず、ファイルにまだロックがあると想定しています。これは通常、このような問題に当てはまります。

于 2013-05-21T18:32:06.997 に答える