当前位置: 首页 > 知识库问答 >
问题:

应用程序在尝试调用BufferedReader时崩溃。readLine()

孙财
2023-03-14

我正在开发一个Android应用程序,它必须从文件中解析文本。

我的解析器中有以下方法。java类:

private String getText(String fileName) {
        BufferedReader buffer = null;
        File file = new File(fileName);
        try{
           buffer  = new BufferedReader( new FileReader(file));
        }
        catch (FileNotFoundException e){
            System.out.println("Could not find file" + fileName);
        }

        String everything = null;
        try{
            StringBuilder builder = new StringBuilder();
            String line = null;

            while ((line = buffer.readLine()) != null){
                builder.append(line);
                builder.append(System.lineSeparator());
                line = buffer.readLine();
            }
            everything = builder.toString();
            //buffer.close();
        }
        catch (IOException e) {
            e.printStackTrace();
            return null;
        }
        finally {
            if ((buffer != null)) {
                try {
                    buffer.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return everything;
    }

每当调用缓冲区时,我都会遇到问题。while循环中的readLine()方法。

我传递以下路径信息File对象是:

"/Users/aa/Desktop/parser.txt"

现在我已经看了堆栈和在线上的许多帖子,以便尝试解决这个问题,并尝试使用一些解决方案,但没有运气。这是我从错误堆栈跟踪中获得的一个片段。

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String java.io.BufferedReader.readLine()' on a null object reference
at com.example.allanaraujo.parser.Parser.getText(Parser.java:40)
at com.example.allanaraujo.parser.Parser.parse(Parser.java:19)
at com.example.allanaraujo.parser.OpenDocument.uploadButton(OpenDocument.java:62)
at java.lang.reflect.Method.invoke(Native Method) 
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
at android.view.View.performClick(View.java:5198) 
at android.view.View$PerformClick.run(View.java:21147) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5417) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

我确信文件的路径是正确的,因为我在调试时检查了它。我不确定我还应该在这里考虑什么。

编辑:我是在OSX上开发的,不是windows或Linux

共有2个答案

鲜于高明
2023-03-14

有几件事:

  while ((line = buffer.readLine()) != null){
     builder.append(line);
     builder.append(System.lineSeparator());
     line = buffer.readLine();  //remove this line
   }

您需要删除注释行,因为您要调用readLine两次。当正确初始化缓冲区时,将跳过行。

为了防止出现空指针异常,您应该:

if(buffer == null) return "buffer not ready";  //or something like that.
String everything = null;
陆城
2023-03-14

看起来您正试图将本地(可能是Windows)文件路径传递到设备或模拟器。

“/Users/aa/Desktop/parser.txt”

这行不通。你必须在你的Android项目中有这个文件。您可以将其放在资产文件夹中,并按如下方式访问:

AssetManager manager = context.getAssets();
InputStream input = manager.open("parser.txt");

或者,您可以将其放在原始文件夹中,并按如下方式访问:

InputStream输入=上下文。getResources()。openRawResource(R.raw.parser)

你在BufferedReader上得到空的原因是因为系统在你的Android项目中找不到那个文件路径。然后,正如注释中指出的,您没有正确处理异常,并继续尝试读取流。

 类似资料:
  • 当我运行应用程序时,它工作得很好,但是当我想调试一个变量值时,应用程序就崩溃了。下面是完整的调试日志。我不知道是什么错误来纠正它。你们能帮帮我吗?我读到了一些关于并且我禁用和启用了ADB集成,但没有帮助我。我试图清洁,重建和运行的项目再次和没有帮助我。每次我尝试开始调试时,应用程序都会崩溃。 提前谢谢!!

  • 主要活动 碎片 这是一个简单对话框的代码。 这里有一个我从中学习的链接。如果我只需通过调用按钮创建对话框,它就可以完全正常工作。

  • 当我尝试连接Android Studio调试器时,我的一些应用程序崩溃,然后我收到以下错误: 我试着重启Windows 我正在使用最新版本的Android SDK,构建工具,。。。 此崩溃后的部分日志:

  • 我尝试在1个应用程序中构建扫描仪和生成器。当我按下发电机按钮时,它突然崩溃了。我的日志中没有任何错误或警告。 这是我的生成器代码: 主活动代码: 有人知道怎么解决这个问题吗?请帮帮我。 更新 以下是我的生成器xml代码: 我希望这将有助于我的问题:( 更新:这是由我愚蠢的打字错误修正;)。非常感谢迄今为止所有回答我问题的人。我说不出我有多感激。特别是对于那个我已经投票支持正确答案的家伙。你真是个英

  • 问题内容: 这是启动桌面版本时得到的: 我都试过这个政党成员和这一个,我也得到了同样的错误在同一直线上。 编辑: 我只是注意到我的.tmx文件的数据是由Tiled Map Editor自动编码的,所以我只是停用了它,但仍然遇到相同的错误。 如果我复制/粘贴该项目(我的意思是整个项目,不仅是render()方法),它会工作,但是当我尝试在自己的项目中加载自己的地图时,它只会崩溃… 因此,在那之后,我