3

したがって、HashMapプロパティをPropertiesファイルに保存する際にキャストの問題が発生します。これは、のキーHashMapがキャストできないオブジェクトであるjava.lang.Stringためです。(String, String)HashMap(Object, Long)

HashMapの内容をファイルに保存してHashMap、次にプログラムを実行したときにそれらの内容を読み込めるようにしたいだけです。

HashMaps私は、保存される前に含まれていたオブジェクトを補充しようとする無駄な試みを何度も経験しました。オブジェクトを文字列に変換する簡単な方法を考えてみましたが、インデックスが作成されPropertiesHashMapsいないため、これらの文字列を必要なオブジェクトに戻すことはできません。これを達成する方法は?

これが私がやろうとしていることです:

    public File savedHashMaps = new File("SavedHashMaps.list");
// in my case, the object is 'Location' from an implemented API
public Map<Location, Long> map = new HashMap<Location, Long>();

public void saveMaps() {
    Properties prop = new Properties();
    try {
        if (!map.isEmpty()) {
            prop.load(new FileInputStream(savedHashMaps));
            prop.putAll(map);
            prop.store(new FileOutputStream(savedHashMaps), null);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void loadMaps() {
    Properties prop = new Properties();
    try {
        prop.load(new FileInputStream(savedHashMaps));
        if (!prop.isEmpty()) {
            map.putAll((Map)prop);
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

1 に答える 1

2

を使用してObjectInput/OutputStream

public File savedHashMaps = new File("SavedHashMaps.list");
public Map<Location, Long> map = new HashMap<Location, Long>();

public void saveMaps() {
    try {
        ObjectOutputStream oos = new ObjectOutputStream (new FileOutputStream(savedHashMaps));
        oos.writeObject(map);
        oos.close();
    } catch (Exception e) {
        // Catch exceptions
    }
}

public void loadMaps() {
    try {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(savedHashMaps));
        Object readMap = ois.readObject();
        if(readMap != null && readMap instanceof HashMap) {
            map.putAll((HashMap) readMap);
        }
        ois.close();
    } catch (Exception e) {
        // Catch exceptions
    }
}

これはメモリからのものであるため、エラーが発生して申し訳ありませんが、これによりすべてのロケーション、ロング マッピングが保存され、再ロードされます。また、注意として、 Location クラスは実装する必要がありますSerializable(またはそれを実装するスーパークラスが必要です) (これはマーカー インターフェイスです (java.dzone.com/articles/marker-interfaces-java を参照) ので、追加するだけですimplements Serializable)。

于 2012-11-28T04:10:35.350 に答える