产生 NPE 的 FileReader

FileReader producing a NPE

我在我的设备上本地存储了一个文件,如果我不重新启动 phone,我可以很好地读取该文件。当我重新启动并读取日志时,新的 FileReader 抛出 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 是一个表示文件的字符串。单击某些内容后,该文件会定期写入 Activity:

// 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) {
    }

如果

new FileReader(ABS_FILENAME)

确实产生了一个NullPointerException,显然ABS_FILENAME必须为null。