我必须更改文件夹的标题大小写。基本上,在应用程序启动时,我想查找旧的外壳,如果它仍在那里重命名它。到目前为止,在我的测试中,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卡的根,不是每次应用程序启动时都不想这样做(看起来不是一个非常干净的解决方案)。
有什么想法吗?
答案 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
之后将它们与您的文件名进行比较。希望它能起作用