我有这个片段:
Log.d("iBank", "Helper: " + helper.toString());
Log.d("iBank", "File: " + file.toString());
if(helper.read(file).equals(""))
{
dataDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS);
}
else
{
dataDir = new File( helper.read(file) );
}
我的问题是,它总是在if(helper.read(file).equals(""))
上抛出NullPointerException。我在两个对象上做了Log.d()(就像你在上面的代码中看到的那样),但它并没有抛出那个exeption。起初,我虽然在helper.read()
上出了问题。但是,如下所示,我已经发现了可能的错误:
public String read(File file)
{
if(file == null)
return "";
String data = "";
if( !file.exists())
{
try {
file.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
}
try {
FileReader fr = new FileReader(file);
BufferedReader bfr = new BufferedReader(fr);
data = bfr.readLine();
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
我不确定我的代码有什么问题。也许我想念一些东西,但我无法理解。
更新
我将代码修改为return (data == null) ? "" : data;
答案 0 :(得分:2)
我认为bfr.readLine();返回null,因此helper.read(file)为null。
BufferedReader的readline返回行的内容,如果在读取器结束之前没有读取任何字符,则返回null。
您确定该文件不为空。 file.toString()将文件对象转换为字符串表示形式,但您不知道该文件是否为空。
答案 1 :(得分:2)
而不是记录,尝试调试并查看真正发生的事情......
我的猜测:在调试时,您会看到bfr.readLine()
返回null,它存储在data
中。这导致read()
也返回null。