Android 目录不存在时应用程序崩溃

Android 目录不存在时应用程序崩溃,android,file,file-io,android-file,Android,File,File Io,Android File,嗨,我是安卓的业余爱好者,所以我可能没有意识到一些显而易见的事情 我有一个方法,用特定目录中的苍蝇列表填充全局文件数组变量。问题是,如果以前使用“我的应用程序”在目录中保存文件,那么一切都可以正常工作。但是,如果用户没有保存文件,则会弹出一条错误消息,说明他们尚未保存文件 我会检查目录是否存在,但当目录尚未创建时,应用程序会崩溃 这是我的代码看起来像任何援助将不胜感激 private void getTemplates() { //Gets file directo

嗨,我是安卓的业余爱好者,所以我可能没有意识到一些显而易见的事情

我有一个方法,用特定目录中的苍蝇列表填充全局文件数组变量。问题是,如果以前使用“我的应用程序”在目录中保存文件,那么一切都可以正常工作。但是,如果用户没有保存文件,则会弹出一条错误消息,说明他们尚未保存文件

我会检查目录是否存在,但当目录尚未创建时,应用程序会崩溃

这是我的代码看起来像任何援助将不胜感激

    private void getTemplates()
{       
    //Gets file directory for saved templates
    File finalMarkTemplateDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Final Mark Templates");

    //Checks if path exists in other word if any templates have been saved before
    if(finalMarkTemplateDir.exists())
    {
        templatePaths = finalMarkTemplateDir.listFiles();
    }
    else
    {
        Toast.makeText(this, "No previous templates have been saved.", Toast.LENGTH_LONG).show();
        setResult(RESULT_CANCELED);
        finish();
    }
}

我也是一个业余爱好者,您的代码中没有创建文件,调用新的file()方法不会创建文件。请检查一下

try {
            finalMarkTemplateDir.createNewFile();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

当我调用setResult和finish方法时,我成功地解决了我的问题。我没有意识到程序流会返回到onCreate方法,这意味着onCreate中的其余方法调用仍在被调用,它们需要templatePaths数组

因此,基本上我认为finish会停止处理并返回调用类(使用startActivityForResult)。现在,我从onCreate调用finish,并使用一个布尔值来确定是否可以成功访问该目录

    @Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    //setContentView(R.layout.dialog_load_template);

    boolean fileLoadStatus = getTemplates();

    if(fileLoadStatus)
    {
        populateTemplateList(templatePaths);
    }
    else
    {
        setResult(RESULT_CANCELED);
        finish();
    }
}

    private boolean getTemplates()
{   
    boolean fileLoadStatus = false;

    //Gets file directory for saved templates
    File finalMarkTemplateDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/Final Mark Templates");

    //Checks if path exists in other word if any templates have been saved before
    if(finalMarkTemplateDir.isDirectory())
    {
        templatePaths = finalMarkTemplateDir.listFiles();
        fileLoadStatus = true;
    }
    else
    {
        Toast.makeText(this, "No previous templates have been saved.", Toast.LENGTH_LONG).show();           
    }

    return fileLoadStatus;

}

谢谢你的帮助,这不是问题所在。该文件是在其他地方创建的。当我调用setResult和finish方法时,我成功地解决了我的问题。我没有意识到程序流会返回到onCreate方法,这意味着onCreate中的其余方法调用仍在被调用,它们需要templatePaths数组。所以基本上我认为finish会停止处理并返回调用类。现在,我从onCreate调用finish,并使用一个布尔值来确定是否可以成功访问该目录。