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

jwa*_*ell 14 java filesystems cross-platform file case-sensitive

我有一个String形式的文件路径.在Java中,我需要确定文件系统上是否存在该文件(并且我们的代码需要在Windows,Linux和OS X上运行时是跨平台的).

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

例如,我的文件路径为"ABC.txt".文件系统上存在名为"abc.txt"的文件.以下代码将在Windows 上返回true但在Linux 上为false:

new File("ABC.txt").exists();
Run Code Online (Sandbox Code Playgroud)

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

Shi*_*iel 14

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


Len*_*y T 6

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

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

  • +1不完全是主题问题的答案,但帮助我在​​Windows上执行区分大小写的检查. (3认同)