Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Сохранение HashMap (и прочих "контейнеров") в файл

yar1k

Активный участник
Баллы
63
Имя в Minecraft
yar1k
я снова не в тему, так, как мне пока нельзя создать свою...
кто может подсказать, как сохранить HashMap<String, String> в файл, а потом загрузить обратно?

Пробовал так:

Java:
    public static void save(HashMap<String, String> map, String path) {
 
        try
        {
            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(path));
            oos.writeObject(map);
            oos.flush();
            oos.close();
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
    }
 
    @SuppressWarnings("unchecked")
    public static HashMap<String, String> load(String path) throws IOException, Exception {
        ObjectInputStream ois = new ObjectInputStream(new FileInputStream(path));
        HashMap<String, String> result = (HashMap<String, String>)ois.readObject();
        ois.close();
        return result;
    }

Да вобще много как пробовал, но пока не выходит.
 
@yar1k, Вы ведь просто хотите данные записать, а потом считать? Лучше использовать для этого уже готовый формат (и соответственно механизмы для работы с ним) - yml.
В BukkitAPI есть класс YamlConfiguration, которым я сейчас пользуюсь для сохранения всего.

В вашем случае, HashMap можно сохранять так:

Java:
    public  void saveHashMap(){
        try {
            YamlConfiguration cfg = new YamlConfiguration();
            for (String key : hashmap.keySet()){
                cfg.set(key, hashmap.get(key));
            }
            File f = new File (getDataFolder()+File.separator+"hashmap.yml");
            if (f.exists()) f.delete();
            cfg.save(f);
        } catch (Exception e){
            e.printStackTrace();
        }
    }
 
В принципе работать также как с getConfig() - это одно и тоже.

Единственное, если сохранялся hasmap в котором ключи могут быть разные, то тогда нужно сначала прочитать ключи, а потом уже данные.

Как-то так:
Java:
    public  void loadHashMap(){
        try {
            YamlConfiguration cfg = new YamlConfiguration();
            File f = new File (getDataFolder()+File.separator+"hashmap.yml");
            hashmap.clear();
            if (f.exists()) {
                cfg.load(f);
                Set<String> keys = cfg.getKeys(false);
                if (keys.size()>0)
                    for (String key : keys)
                            hashmap.put(key, cfg.getString(key);
            }
        } catch (Exception e){
            e.printStackTrace();
        }
    }
 

Поделиться этой страницей

Назад
Верх