获取NullPointerException检查文件是否存在

时间:2017-03-06 21:44:26

标签: 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) {
             }

         }

现在的问题是,如果我尝试删除文件,如果我得到nullpointerexception,但如果我先创建文件,那么我将其成功删除,然后当我再次按下删除按钮时显示没有文件的例外,但是在应用程序启动时,如果我按下按钮而不创建文件,则dosnt检查文件是否可以删除。

1 个答案:

答案 0 :(得分:1)

在您执行代码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参考页面)