1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем yar1k, 3 мар 2013.

  1. Автор темы
    yar1k

    yar1k Активный участник

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

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

    Код:
        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;
        }
    Да вобще много как пробовал, но пока не выходит.
     
  2. fromgate

    fromgate Старожил Пользователь

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

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

    Код:
        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();
            }
        }
     
  3. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    В принципе работать также как с getConfig() - это одно и тоже.

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

    Как-то так:
    Код:
        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();
            }
        }
     
  4. Автор темы
    yar1k

    yar1k Активный участник

    Баллы:
    63
    Имя в Minecraft:
    yar1k
    Спасибо, вы очень помогли.
     

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