android检查文件是否存在区分大小写?

时间:2011-03-23 15:13:12

标签: android file

我必须更改文件夹的标题大小写。基本上,在应用程序启动时,我想查找旧的外壳,如果它仍在那里重命名它。到目前为止,在我的测试中,android忽略了外壳,并将文件夹外壳报告为你发送的内容。所以基本上

new File(PATH_WITH_OLD_CASING) == new File(PATH_WITH_NEW_CASING)

并且它似乎也报告了您发送的绝对路径,而不考虑它在文件系统中实际命名的内容。所以

new File(PATH_WITH_OLD_CASING).getAbsolutePath() == PATH_WITH_OLD_CASING;

new File(PATH_WITH_NEW_CASING).getAbsolutePath() == PATH_WITH_NEW_CASING;

即使他们引用同一个文件。

因此,我正在努力想出一种方法来确定旧套管是否仍在那里。我可以在父目录上做一个listFiles来获取外壳,但它是SD卡的根,不是每次应用程序启动时都不想这样做(看起来不是一个非常干净的解决方案)。

有什么想法吗?

4 个答案:

答案 0 :(得分:1)

你说目录在SD卡上,这很可能是你的问题所在。

默认情况下,SD卡格式化为FAT,保留大小写但不区分大小写。

这表示/ sdcard / Hello与/ sdcard / HeLlO相同。

现在,我认为File没有按照您的预期行事的原因是因为它在您传递的路径名上运行,而不是读取文件系统中存在的内容。即使你打开文件并且它成功了,我仍然不会期望它会更新你给它的路径,我希望它只是维护一个文件成功打开的内部标志。

您应该使用getCanonicalPath()而不是getAbsolutePath():

  

大多数来电者应该使用   getAbsolutePath()代替。一个规范的   路径明显更贵   计算,而不是一般有用。   规范路径的主要用途是   确定两条路径是否指向   通过比较相同的文件   规范化的路径。

答案 1 :(得分:1)

更新:我提出的不完全理想的解决方案

if (parentDirectory.listFiles(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        return name.contentEquals(DEPRECATED_FILE_NAME);
    }
   }).length > 0){
//old file exists
}

答案 2 :(得分:0)

您始终可以将文件名转换为字符串值,然后使用toUpper或toLower函数检查旧文件。这是您解决方案中的一个额外步骤,但可能是实现您正在尝试的最快捷方式。

答案 3 :(得分:0)

... HMM 首先尝试列出目录。列表目录的示例代码为here

之后将它们与您的文件名进行比较。希望它能起作用