2014-01-06 45 views
0

我想写从LinkedHashmap到一个文件信息写入从LinkedHashMap的信息的时候,但是这个代码是给我一个NullPointerExceptionNullPointerException异常到文件

public void writeFile(String file, Map<Word, Defination> wmap) { 

    File FileName = new File(file); 
    try { 

     FileOutputStream stream = new FileOutputStream(FileName, true); 
     PrintStream pstrim = new PrintStream(stream); 
     String line = null; 
     rmap=wmap; 
     Iterator<Word> it = wmap.keySet().iterator(); //generic iterator 
     while (it.hasNext() && found == 0) { 
      String key = it.next().getWord(); 
      System.out.println(key); 
      Defination defns = new Defination(wmap.get(key).getDef()); //null pointer exception here 
      line = key + "=" + defns.getDef(); 

      if (line != null) { 
       pstrim.println(line); 
      } 
     } 
     stream.close(); 
    } catch (IOException IO) { 
    } 

} 

为什么有NullPointerException和哪能修理它?

+1

你的wmap.get(键)似乎返回null ..你有对应的键值吗? – TheLostMind

+1

'.getDef()'也可能是空的。 –

+1

@RyanCarlson - 这不会给NullPointerException ...如果getDef()返回null,我们不会在其他任何地方使用它... – TheLostMind

回答

2

您应该检查地图是否包含给定的密钥。如果没有,继续迭代:

if (!wmap.containsKey(key)) { 
    continue; 
} 
3

显然地图中包含映射到一个null的关键。 Map接口的某些实现允许使用null键和/或空值。

javadoc

如果此映射包含该键的映射返回指定键所映射的值,或为空。 更正式地说,如果这个映射包含从键k到值v的映射(key == null?k == null:key.equals(k)),那么这个方法返回v;否则它返回null。 (最多可以有一个这样的映射。)

null的返回值不一定表示映射不包含该键的映射;地图也可能明确地将密钥映射为空。 containsKey操作可用于区分这两种情况。

+1

+1 ...详细解释... – TheLostMind