Java-запрос хеш-карты - PullRequest
       4

Java-запрос хеш-карты

0 голосов
/ 27 июля 2010

Я читаю значения из файла и сохраняю эти значения в хэш-карте, используя bufferedreader, следующим образом -

while((String str=buffread.readLine()).length()>1)
            {
                hashMap.put(str.substring(0,5),str);

            }

Я также могу убедиться, что в хэш-карте есть все данные, которые изначально присутствовалив файле.

Теперь я пытаюсь записать значения точного hashmap в другой файл следующим образом -

FileWriter outFile = new FileWriter("file path");
         PrintWriter out = new PrintWriter(outFile);
         Set entries = hashMap.entrySet();
          Iterator entryIter = entries.iterator();
          while (entryIter.hasNext()) {
             Map.Entry entry = (Map.Entry)entryIter.next();
             Object value = entry.getValue();  // Get the value.
             out.println(value.toString());
          }

Но это, кажется, записывает меньшее количество записей вфайл, чем значение hashMap1.size() или, по сути, количество записей, которые он первоначально считал из исходного файла.

Хотя у меня есть догадка, что это из-за Printwriter и Filewriter, если кто-то может указать мне напочему эта проблема возникает, это было бы очень полезно.

С уважением p1nG

Ответы [ 5 ]

2 голосов
/ 27 июля 2010

Возможно, вы исключили это из кода, который вы разместили, но вы явно вызываете flush() и close() для PrintWriter / FileWriter объектов, когда закончите с ними?

Каждый вызов println() не обязательно приводит к записи строки в базовый OutputStream / файл.

2 голосов
/ 27 июля 2010

Если первые 5 символов в каждой строке исходного файла не являются уникальными, эта строка

hashMap.put(str.substring(0,5),str);

обеспечит перезапись некоторых записей на карте.

1 голос
/ 27 июля 2010

При записи в файл может произойти сбой:

Методы в этом (PrintWriter) классе никогда не генерируют исключения ввода-вывода. Клиент может узнать, возникли ли какие-либо ошибки, вызвав checkError ().

В общем, я не думаю, что это проблема с HashMap, так как вы сказали, что данные прочитаны правильно.

0 голосов
/ 28 июля 2010

Вы не можете правильно прочитать файл с этим кодом. Вы должны проверить результат readLine () на null, прежде чем делать с ним что-то еще, если, конечно, вам не нравится перехватывать NullPointerExceptions.

0 голосов
/ 27 июля 2010

Итератор на данном этапе вам не нужен, просто используйте набор ключей для итерации.

Set<String> keys = hashMap.keySet();
for(String key : keys){
 out.println(hashMap.get(key));
}

должен это сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...