我正在读取文件中的值并使用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
答案 0 :(得分:2)
除非源文件每行的前5个字符都是唯一的,否则此行
hashMap.put(str.substring(0,5),str);
将确保您覆盖地图中的某些条目。
答案 1 :(得分:2)
也许你将这个从你发布的代码中删除了,但是当你完成它们时,你是否明确地在flush()
/ close()
个对象上调用PrintWriter
和FileWriter
?
对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));
}
应该这样做。