【问题标题】:Isn't Android File.exists() case sensitive?Android File.exists() 不区分大小写吗?
【发布时间】:2011-09-24 01:37:19
【问题描述】:

我创建了一个新文件夹“sdcard/dd”:

File album = new File(albumPath);

if (album.exists()) {
   Log.d(TAG, albumPath + " already exists.");
} else {
   boolean bFile = album.mkdir();
}

再一次,我用相同的代码创建了第二个文件夹“sdcard/DD”,但是,这一次album.exists()返回true,这表明“dd”等于“ DD”。

有人知道为什么File.exists() 不能检查文件夹名称的大小写吗?谢谢!

【问题讨论】:

    标签: android file case-sensitive exists mkdir


    【解决方案1】:

    虽然 Linux 和 Android 通常在文件名方面是区分大小写的,但通常用于 SD 卡、记忆棒等的 FAT 文件系统是不区分大小写的。因此,Android 在处理这些文件系统上的文件时不会区分不同的情况。

    所以如果你有两个文件,/sdcard/file(在 SD 卡上)和/data/file(在内部文件系统上),你会得到以下结果:

    new File("/sdcard/file").exists(); // true
    new File("/sdcard/FILE").exists(); // true, /sdcard is a case-insensitive file system
    new File("/data/file").exists(); // true
    new File("/data/FILE").exists(); // false, /data is a case-sensitive file system
    

    【讨论】:

    • 我使用的/sdcard/文件实际上是在内存中,不是SD卡,Android上后面的SD卡是/sdcard/SD_CARD/。因此,/sdcard/dd 和 /sdcard/DD 都在 Linux 文件系统上。
    【解决方案2】:

    根据 Android 文档,“Android 支持具有传统存储的设备,传统存储被定义为具有不可变 POSIX 权限类和模式的不区分大小写的文件系统。” https://source.android.com/devices/storage/traditional.html

    【讨论】:

      【解决方案3】:

      文件存在区分大小写。我以某种方式希望您要么没有删除您创建的第一个文件夹(sdcard/dd),要么有一些奇怪的 sdcard 文件不区分大小写(它是 FAT,不区分大小写,但这真的不重要)。

      【讨论】:

      • 实际上,FAT 确实很重要——Android 只能使用文件系统支持的内容,因此如果文件系统(本例中为 FAT)不区分大小写,那么 Android 无法为该文件系统提供区分大小写的功能。否则将创建一个新的、不兼容的 FAT 变体。这是完全已知的预期行为。
      【解决方案4】:

      例如在 windows 中试试这个。文件名不区分大小写。与 linux 一样(android 基于 linux)。浏览目录也被认为是不区分大小写的。

      所以 dd 和 DD 都被识别为相同的路径。

      【讨论】:

      • Windows 文件系统 通常不区分大小写,但 Linux 文件系统 区分大小写。如果您在 Linux(包括 Android)上使用 Windows 风格的文件系统,那么它将不区分大小写(但通常会保留大小写)
      【解决方案5】:

      文件可以区分大小写,即使通过 ftp 也可以区分大小写,但是 exists() 方法不区分。这就是 Android 5.1 上 /storage/emulated/0/somepath 中的情况。我认为这是不一致的行为。

      【讨论】:

        猜你喜欢
        • 2020-06-03
        • 2013-04-17
        • 2023-03-25
        • 2012-10-03
        • 2014-12-17
        • 1970-01-01
        • 2012-12-01
        • 2013-03-06
        • 2020-02-18
        相关资源
        最近更新 更多