java - file.exists() 当文件存在时返回 false

标签 java android file file-io

在我正在开发的 Android 应用程序中,用户应该能够在 SD 卡上创建一个新的 CSV 文件,使用他们在 EditText 中输入的文本命名。

问题是在使用目录和文件名实例化文件后,file.exists() 返回 false,即使该文件确实存在于该位置。我已经使用 Android 文件浏览器和 Windows 资源管理器浏览到 SD 卡,并且该文件确实存在。

这是检查文件是否已存在的正确方法吗?如果存在,我缺少什么以便它在存在时返回 true?

String csvname = edittext.getText().toString() + ".csv";
File sdCard = Environment.getExternalStorageDirectory(); //path returns "/mnt/sdcard"
File dir = new File (sdCard.getAbsolutePath() + "/Android/data/" + getPackageName() + "/files/"); // path returns "/mnt/sdcard/Android/data/com.phx.license/files"
dir.mkdirs();
File file = new File(dir, csvname); //path returns "/mnt/sdcard/Android/data/com.phx.license/files/Test.csv"

if(!file.exists()) //WHY DOES IT SAY IT DOESN'T EXIST WHEN IT DOES?
{
    ...
}

最佳答案

如果您使用 createNewFile,它只会创建一个不存在的文件。

Java Files Documentation

公共(public) boolean createNewFile() 抛出 IOException 当且仅当具有此名称的文件尚不存在时,以原子方式创建一个以此抽象路径名命名的新空文件。检查文件是否存在以及如果文件不存在则创建文件是单个操作,对于可能影响该文件的所有其他文件系统 Activity 而言,该操作是原子的。 注意:此方法不应用于文件锁定,因为生成的协议(protocol)不能可靠地工作。应改用 FileLock 工具。

返回: 如果命名文件不存在且已成功创建,则为 true;如果命名文件已经存在则为 false throw : IOException - 如果发生 I/O 错误 SecurityException - 如果安全管理器存在并且其 SecurityManager.checkWrite(java.lang.String) 方法拒绝对文件的写访问 自从: 1.2

关于java - file.exists() 当文件存在时返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5434668/

相关文章:

Python 字符串作为 Skimage imread 中的文件

java - 在 Eclipse 中找不到资源

java - 删除 : in 12:45 (java)

java - geoserver 中的 MAVEN 中缺少 Artifact 错误

android - 如何实现 broadcastrecevier 以卸载设备中的特定应用程序?

android - 如何在选项卡/fragment 转换之间为新的 float 操作按钮设置动画?

android - 如何使用intent.createChooser android获取任何类型的文件

java - 获取设备的本地时区

linux - 如何合并2个大文件

python - 我的单元测试中可以包含哪些附加测试用例?