使用scanner读取文件时获取空指针异常

时间:2012-03-14 12:40:28

标签: java android

我想读取一个文本文件并解析字符串,直到eof ..还有一个代码片段.. programs.txt在资产目录下

    public void insert_programs() throws FileNotFoundException {
    BufferedReader bfr = null;
    try {
        bfr = new BufferedReader(new 
                InputStreamReader(getAssets().open("programs.txt"))); // <-- NPE occurs on that line 

    } catch (IOException e) {
        e.printStackTrace();
    }
    Scanner pgm = new Scanner(bfr);
    pgm.useDelimiter("*{3}");
    while (pgm.hasNext()) {
        String str = pgm.next();
            process(str);
        }
    }

记录

03-14 18:05:34.936: E/AndroidRuntime(467):  at dalvik.system.NativeStart.main(Native Method)
03-14 18:05:34.936: E/AndroidRuntime(467): Caused by: java.lang.NullPointerException
03-14 18:05:34.936: E/AndroidRuntime(467):  at android.content.ContextWrapper.getAssets(ContextWrapper.java:74)
03-14 18:05:34.936: E/AndroidRuntime(467):  at c.theworld.com.nikhil.Database.insert_programs(Database.java:40)

3 个答案:

答案 0 :(得分:1)

将此添加到您的代码中:

bfr = new BufferedReader(new 
            InputStreamReader(this.getAssets().open("programs.txt")));

答案 1 :(得分:0)

看起来你的BufferedReader将为null。你有没有尝试将扫描器代码放在try catch块中。如果您的程序获得IOException,则bfr将为null,您将获得NPE。

public void insert_programs() throws FileNotFoundException { 
    BufferedReader bfr = null; 
    try { 
        bfr = new BufferedReader(new  
                InputStreamReader(getAssets().open("programs.txt"))); 

Scanner pgm = new Scanner(bfr); 
    pgm.useDelimiter("*{3}"); 
    while (pgm.hasNext()) { 
        String str = pgm.next(); 
            process(str); 
        }
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 

    } 

答案 2 :(得分:0)

方法ContextWrapper.getAssets()正在抛出NullPointerException。您正在扩展ContextWrapper(或扩展它的另一个类),看起来它还没有正确初始化。 ContextWrapper中的基础Context为空。