2015-01-16 37 views
-1

我有一个文件存储在本地设备上,如果我不重新启动手机,我读得非常好。当我重新启动并读取日志时,新的FileReader将引发一个NPE;为什么?产生NPE的文件读取器

BufferedReader br = null; 
FileReader fr = null; 
    try { 
     Log.d("DEBUG", "Before filereader"); 
     fr = new FileReader(ABS_FILENAME); 
     Log.d("DEBUG", "Before BufferedReader"); 
     br = new BufferedReader(fr); 

     String current; 

     Log.d("DEBUG", "About to read file"); 
     while((current = br.readLine()) != null) { 

     } 
    } 
    } catch (Exception e) { 
     Log.d("DEBUG", "Exception thrown: " + e.getMessage()); 
    } finally { 
     try { 
      if (fr != null) { 
       fr.close(); 
      } 
     } catch (IOException ex) { 
      Log.d("DEBUG", "Problem closing file reader"); 
     } 
    } 
    return null; 

上述代码发生在广播接收机中。 ABS_FILENAME是表示文件的字符串。该文件被写入到定期的活动,一旦遇到点:

// in an onClick that gets invoked 
try { 
      String line = myKey + " " + myValue; 
      fw.write(line); 
      fw.write(System.getProperty("line.separator")); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       if(fw != null) 
        fw.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 

// elsewhere in the activity 
@Override protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_my); 

    myFile = new File(getFilesDir(), FILENAME); 
    try { 
     if (!myFile.exists()) { 
      myFile.createNewFile(); 
     } 
     ABS_FILENAME = myFile.getAbsolutePath(); 
     fw = new FileWriter(myFile.getAbsoluteFile(), true); 
    } catch(IOException e) { 
    } 
+0

我认为您发布的代码中存在一些语法错误;请修复 – Aify

+0

...不是错误顺便说一句,它是追赶后面的额外右大括号 – Aify

+0

它是一个临时文件,当设备重新启动时被删除?它是SD卡上的文件,在重新启动后暂时无法访问,因为介质扫描仪正在运行? – samgak

回答

0

如果

new FileReader(ABS_FILENAME) 

真正产生NullPointerException,明确ABS_FILENAME必须为空。