android - 获取 NullPointerException 检查文件是否存在

标签 android file nullpointerexception

我正在尝试改进我的删除按钮,因此如果我按下该按钮并且文件不存在,它应该启动一个 Toast 提示没有要删除的文件,我试过这个:

  mBtnBorrar.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {


                 if(file.exists()){
                     file.getAbsoluteFile().delete();
                     Toast.makeText(MainActivity.this, "File deleted..", Toast.LENGTH_SHORT).show();
                 }else
                 {
                     Toast.makeText(MainActivity.this, "There is no file to delete.", Toast.LENGTH_SHORT).show();
                 }


             }
         });

我的文件在这里声明:

 File file;

 File path = new File(Environment.getExternalStorageDirectory()
                 .getPath());

         if (!path.exists() && !path.mkdirs()) {
             throw new IOException("No se pudo crear el directorio del archivo.");
         }else{

             try {
                 file = File.createTempFile("audio", ".3gp", path);
             } catch (IOException e) {
             }

         }

现在的问题是,如果我尝试使用 if 我得到一个 nullpointerexception 来删除文件,但是如果我先创建文件,那么我会成功删除它,然后当我再次按下删除按钮它显示没有文件的异常,但在应用程序启动时,如果我在没有创建文件的情况下按下按钮,它不会检查文件是否存在要删除。

最佳答案

直到您执行代码 file = File.createTempFile("audio", ".3gp", path);,然后 file 将为 null。如果您在创建文件之前测试删除按钮,就会出现这种情况。简单的空检查是处理此问题的常用方法。

编辑: 将空检查更改为 onClick()

        if(file != null) {
             if(file.exists()){
                 file.getAbsoluteFile().delete();
                 Toast.makeText(MainActivity.this, "File deleted..", Toast.LENGTH_SHORT).show();
             }else
             {
                 Toast.makeText(MainActivity.this, "There is no file to delete.", Toast.LENGTH_SHORT).show();
             }
        }

另一种方法是设置一个标志,指示文件是否已首先创建,然后在 onClick() 中检查该标志。

仅供引用,link引用页)

关于android - 获取 NullPointerException 检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42636154/

相关文章:

c - 将行读取到字符串数组

java - 什么是NullPointerException,我该如何解决?

android - 结合 StateListDrawable 和 LevelListDrawable

android - ivona tts 以及如何以编程方式获取所有已安装语音的列表?

django - 如何使用 Django FileFields 在模板中显示当前文件

java - 写入已存在的文件 - 但我有一个问题

java - ResultSet 抛出 NullPointers,但 next() 返回 true

java - 什么是NullPointerException,我该如何解决?

android - 无法在android应用程序API级别22中使用java功能接口(interface)的Consumer<T>

android - 应用程序是否可以更改 Android 主屏幕?