【问题标题】:calling exists on directory always return false in android在目录上调用存在总是在android中返回false
【发布时间】:2018-01-17 06:37:27
【问题描述】:

我正在尝试在内部存储中为我的应用创建一个目录。以下是我用来检查目录是否存在的代码。如果目录已经存在,则返回;否则,创建并返回目录。但即使在随后对该方法的调用中,对目录的 exists() 调用也总是返回 false。是什么原因?谢谢

public File getMessageVoiceDirectory() {
    File messageVoiceDirectory = this.myContext.getDir("Voice",Context.MODE_PRIVATE);


    if (messageVoiceDirectory.exists() == false) {
        messageVoiceDirectory.mkdirs();
    }


    return messageVoiceDirectory;
}

【问题讨论】:

  • @pratim-检查你从“this.myContext.getFilesDir()”得到的路径..通过调试...... Environment.getExternalStorageDirectory() 使用这个..如果你得到错误的路径

标签: java android


【解决方案1】:

你可以试试这个。它会工作

 File path = new File(this.getFilesDir(), "DirectoryName");
     if (!path.exists()) {
         path.mkdirs();
         Toast.makeText(this,"Created",Toast.LENGTH_LONG).show();
     }
     else
         Toast.makeText(this,"Already Exist",Toast.LENGTH_LONG).show();

【讨论】:

  • 你的第一个 toast 应该检查 mkdirs 的返回值。
【解决方案2】:

当您准确调用getMessageVoiceDirectory() 时,请确保您在 onCreate() 内部调用,

【讨论】:

    【解决方案3】:

    首先,将你的条件切换到

    if (!messageVoiceDirectory.exists()) {
        boolean actuallyCreated = messageVoiceDirectory.mkdirs();
        if (!actuallyCreated){
           Log.e("Activity", "Woah... the mkdirs command got called, but was not successful. We need to investigate.");
        }
    }
    

    接下来,您需要检查mkdirs 的返回值。大概没有创建目录。如果您没有正确的权限,可能会发生这种情况。

    【讨论】:

    • 你认为这回答了关于为什么该方法总是返回false的问题吗??
    • 这可能有助于显示检查mkdirs() 的结果并针对失败情况采取一些适当措施的示例。否则读者可能会忽略答案中最重要的一半!
    • 内部文件目录不需要任何权限。
    猜你喜欢
    • 1970-01-01
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 2013-05-19
    • 2013-01-27
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多