Java 如何检测文件系统是否区分大小写?

Java 如何检测文件系统是否区分大小写?,java,filesystems,case-sensitive,system-properties,Java,Filesystems,Case Sensitive,System Properties,我有一个文件夹中文件名的列表,某个文件名为字符串。我想检测文件名是否在列表中,但需要考虑底层文件系统的属性,即它是否区分大小写 有什么简单的方法可以做到这一点(除了检查System.getProperty(“os.name”).toLowerCase().indexOf(“windows”)!=-1)?;-) 写一个名为“HelloWorld”的文件;尝试读取名为“hELLOwORLD”的文件?不要使用字符串来表示文件;使用java.io.File: 看起来您可以使用。我认为现有的任何示例都不能

我有一个文件夹中文件名的
列表
,某个文件名为
字符串
。我想检测文件名是否在列表中,但需要考虑底层文件系统的属性,即它是否区分大小写


有什么简单的方法可以做到这一点(除了检查
System.getProperty(“os.name”).toLowerCase().indexOf(“windows”)!=-1
)?;-)

写一个名为“HelloWorld”的文件;尝试读取名为“hELLOwORLD”的文件?

不要使用字符串来表示文件;使用java.io.File:


看起来您可以使用。

我认为现有的任何示例都不能正确处理此问题,您需要将文件写入磁盘

    private boolean caseSensitivityCheck() {
    try {
        File currentWorkingDir = new File(System.getProperty("user.dir"));
        File case1 = new File(currentWorkingDir, "case1");
        File case2 = new File(currentWorkingDir, "Case1");
        case1.createNewFile();
        if (case2.createNewFile()) {
            System.out.println("caseSensitivityCheck: FileSystem of working directory is case sensitive");
            case1.delete();
            case2.delete();
            return true;
        } else {
            System.out.println("caseSensitivityCheck: FileSystem of working directory is NOT case sensitive");
            case1.delete();
            return false;
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}

另外,您可以在所述目录的文件对象上使用File的listFiles()方法从目录中获取文件数组。然后可以将其作为数组进行操作,或者使用数组将其转换为列表。aslist我认为这个答案在OSX中不起作用。OS X似乎使用UnixFileSystem作为其文件系统实现,而不管该文件是在区分大小写还是不区分大小写的HFS+文件系统上。因此,当传递大小写不同的文件名时,File.equals(File)在不区分大小写的文件系统上将返回false。编辑:刚刚注意到@SaM在另一个回答中说了同样的话。最后我发现使用File.exists(似乎遵守文件系统的大小写规则)是一种复杂的方式。请注意,“不区分大小写的文件系统”无论如何都不等同于“OS就是Windows”。所有Windows、Linux和Mac操作系统都可以使用区分大小写或不区分大小写的文件系统;不要混淆概念。“黑客”将断言小写文件名不存在;创建一个名为大写的(临时)文件,然后检查名为小写的文件是否存在。我们刚刚在Mac OSX(默认不区分大小写的文件系统)上对此进行了测试,但没有返回预期结果。请注意,它不考虑文件系统,只考虑操作系统-这个答案并不比公认的答案差。只要你知道就好。我认为我找不到更好的解决方案来考虑FS+1Again-不适用于OS X。仅假设区分大小写,因为文件分隔符是正向斜杠!有关更多信息,请参见开发人员之间的讨论:
    private boolean caseSensitivityCheck() {
    try {
        File currentWorkingDir = new File(System.getProperty("user.dir"));
        File case1 = new File(currentWorkingDir, "case1");
        File case2 = new File(currentWorkingDir, "Case1");
        case1.createNewFile();
        if (case2.createNewFile()) {
            System.out.println("caseSensitivityCheck: FileSystem of working directory is case sensitive");
            case1.delete();
            case2.delete();
            return true;
        } else {
            System.out.println("caseSensitivityCheck: FileSystem of working directory is NOT case sensitive");
            case1.delete();
            return false;
        }
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}