java hashmap查询

时间:2010-07-27 18:57:14

标签: java hashmap

我正在读取文件中的值并使用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 个答案:

答案 0 :(得分:2)

除非源文件每行的前5个字符都是唯一的,否则此行

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

将确保您覆盖地图中的某些条目。

答案 1 :(得分:2)

也许你将这个从你发布的代码中删除了,但是当你完成它们时,你是否明确地在flush() / close()个对象上调用PrintWriterFileWriter

println()的每次调用都不一定会导致将一行写入底层的OutputStream /文件。

答案 2 :(得分:1)

写入文件时可能会出现问题:

  

此(PrintWriter)类中的方法永远不会抛出I / O异常。客户端可以通过调用checkError()来查询是否发生了任何错误。

一般情况下,我认为这不是HashMap的问题,因为您说数据已正确读取。

答案 3 :(得分:0)

您无法使用该代码正确读取文件。除非你喜欢捕获NullPointerExceptions,否则你必须在使用它之前检查readLine()的结果为null,除非你喜欢捕获NullPointerExceptions。

答案 4 :(得分:-1)

此时您不需要Iterator,只需在迭代时使用一个键集

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

应该这样做。