12

我通过以下方式创建了一个新文件夹“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()不能检查文件夹名称的大小写吗?谢谢!

4

5 回答 5

34

虽然 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
于 2011-06-28T07:11:06.037 回答
1

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

于 2018-12-11T05:39:08.883 回答
0

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

于 2011-06-28T07:11:07.797 回答
0

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

所以 dd 和 DD 都被识别为同一条路径。

于 2011-06-28T07:12:38.603 回答
-2

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

于 2016-02-26T16:11:25.480 回答