不区分大小写的 File.equals 在区分大小写的文件系统上

我有一个字符串形式的文件路径。在Java中,我需要确定该文件是否存在于文件系统上(并且我们的代码需要跨平台,因为它在Windows,Linux和OS X上运行)。

问题在于,文件路径和文件本身的情况可能不匹配,即使它们确实表示相同的文件(大概这是因为它们起源于Windows并且没有注意到差异)。

例如,我的文件路径为“ABC.txt”。文件系统上存在一个名为“abc.txt”的文件。下面的代码在 Windows 上返回 true,但在 Linux 上返回 false

new File("ABC.txt").exists();

确定文件是否存在以及它是否存在以返回文件系统上文件的句柄的最佳方法是什么?


答案 1

从目录中获取文件列表 (File.list())并使用 比较名称。equalsIgnoreCase()


答案 2

此方法将告诉您是否存在具有相关确切名称的文件(路径部分不区分大小写)。

public static boolean caseSensitiveFileExists(String pathInQuestion) {
  File f = new File(pathInQuestion);
  return f.exists() && f.getCanonicalPath().endsWith(f.getName());
}