In one of the projects that I'm involved in, we do a bunch of file operations which sometimes need to check if a particular filesystem is case sensitive. I was thinking of using java.io.File#equals since its javadoc states:
/** * Tests this abstract pathname for equality with the given object. * Returns <code>true</code> if and only if the argument is not * <code>null</code> and is an abstract pathname that denotes the same file * or directory as this abstract pathname. Whether or not two abstract * pathnames are equal depends upon the underlying *system*. On UNIX * systems, alphabetic case is significant in comparing pathnames; on Microsoft Windows * systems it is not. * * @param obj The object to be compared with this abstract pathname * * @return <code>true</code> if and only if the objects are the same; * <code>false</code> otherwise */ My impression, based on that javadoc, was that the implementation of that API will use the underlying _filesystem_ to decide whether or not its case sensitive. However, my experiments on a macOS which is case insensitive and also a basic check of the implementation code in the JDK, shows that this uses a lexicographic check on the string representation of the paths. Is that what this javadoc means by "underlying system". I understand that there's a further sentence in that javadoc which says UNIX systems are case significant and Windows isn't. However, it wasn't fully clear to me that this API wouldn't delegate it to the underlying filesystem on the OS. While we are at it, is there a better API that can be used to do such a case sensitivity check of the underlying filesystem? I checked the APIs in java.nio.file but couldn't find anything relevant. If there isn't any such API currently, is that something that can be introduced? -Jaikiran