2016-09-09 4 views
-2

Просто интересно, есть ли в JAVA экспортировать хэш-карту?Java: экспорт и импорт HashMap

Я знаю, что вы определяете один через:

HashMap HMAP = новый HashMap();

И я нашел примеры того, как вы можете захватить или вставить информацию в hashmap, но я не знаю, как сохранить «hashmap», так что данные, добавленные во время работы программы один раз, могут быть доступ к программе добавляется еще раз.

В основном, после запуска программы пользователь будет добавлять свое имя, а затем сумму в формате UserName | Amount. И тогда вы можете закрыть программу. В следующий раз, когда вы откроете программу, вы сможете открыть хэш-карту и получить сумму, привязанную к пользователю, используя их UserName в качестве ключа.

Это единственный способ, которым я думал сделать это до сих пор, но, если есть лучший способ сделать это, пожалуйста, всеми средствами, дайте мне знать :)

Спасибо!

+0

Как правило, это делается путем сохранения этой информации в файл или базу данных при записи, а затем чтение из файла или базы данных при каждом открытии программы. – Ben

+0

Да, я собрал это так. Какой лучший способ сделать это, как вы думаете? Текстовый файл? –

+0

Это действительно зависит от вашего варианта использования, но почти во всех случаях это будет проще с помощью каких-то структурированных данных, таких как XML, JSON или CSV. Посмотрите на некоторые библиотеки для каждого из этих форматов и выберите тот, который выглядит проще всего. Если вы работаете только на Java, @Midnightas выглядит так, как будто у него разумное решение. – Ben

ответ

1

Как вы сохраняете свои данные, это ваш выбор.
Я бы предпочел использовать для этого класс java.util.Properties.
Всякий раз, когда вы хотите, чтобы «спасти» ваш HashMap, для цикла на его содержание, а затем вызвать метод setProperty на вашем Properties поле:

Properties props = new Properties(); 
props.load(inputStream); // Only call this if your properties file is not empty 
for(Map.Entry<K, V> entry : yourHashMap.entrySet()) { 
    props.setProperty(entry.getKey(), entry.getValue() + ""); 
} 
props.store(outputStream, "Some comment here."); 

Я добавил + "", чтобы убедиться, что String пройдена.
"Some comment here.", по-видимому, необходим, хотя вы можете сделать его пустым.

+0

Правильно, спасибо. Создает ли это файл где-нибудь? Кроме того, какой будет поток ввода/вывода? –

+0

'outputStream' на' props.store' может быть 'FileOutputStream', если вы хотите сохранить его в файл. – Midnightas

+0

Путь outputStream = "/ path/to/wherever"? Помещая это до того, как блок будет экспортировать файл в указанное место? –

1

HashMap - это структура данных, которая позволяет хранить данные в парах ключ/значение. Хеш-функция используется для равномерного распределения ключей и оптимизации поиска.

Ключ может быть любым, но String является общим выбором, а значением может быть любой класс Java.

Вы действительно не «закрываете» HashMap и «открываете» его снова, как только программа запускается снова, поскольку она локально существует только в памяти, поэтому, когда вы останавливаете JVM (приложение), данные исчезли.

Чтобы не потерять данные, которые хранятся в памяти, вам необходимо их сохранить. Существует много способов сделать это:

  • Вы можете сохранить его в базе данных, SQL или NoSQL.
  • Вы можете сохранить его на диске в файле со стандартным форматом, таким как CSV, XML, JSON, YAML, TOML или пользовательский двоичный формат. Вы даже можете напрямую сериализовать классы Java на диск.
  • Вы можете отправить данные по сети для другой службы для обработки или хранения, типично сериализованной как JSON или XML.

С вашего вопроса кажется, что вы пытаетесь написать настольное приложение. Вы можете хранить данные так же, как CSV или XML, или использовать легкую базу данных SQL, такую ​​как SQLite, но в вашем случае я считаю, что хороший подход - использовать MapDB.Вы используете его в основном как HashMap, и вы можете сохранить его на диск, а позже вы сможете снова прочитать его с диска, так что это будет более или менее то, что вы ожидали от HashMaps.

+0

Url of MapDB http://www.mapdb.org – DrKarl

0

HashMap - Serializable. Это означает, что вы можете записать HashMap в ObjectOutputStream, который поддерживается FileOutputStream, чтобы записать HashMap в файл, а затем вы можете прочитать из файла, используя ObjectInputStream, который поддерживается FileInputStream. Это один из способов сделать это, и это, безусловно, очень естественно для языка программирования Java.

Независимо от того, хорошо это или нет, зависит от вашего прецедента, как уже указывали другие.

Обратите внимание, что объекты вашего HashMap также должны быть Serializable для этого!

Смежные вопросы