如何确保区分大小写的资源是我在不区分大小写的文件系统上寻找的?

时间:2015-03-17 15:35:45

标签: java

我有一个需要使用ClassLoader#getResource(String)查找资源的程序。该程序通常正常,但在Windows机器上我遇到了问题。我把它分解为文件系统的属性不区分大小写。通常,尝试几个路径以查找正确的文件。但是,在不区分大小写的系统上,错误的文件可能匹配。在我的程序中,资源名称是区分大小写,因此如果它具有不同的大小写,则不区分大小写的系统上的返回文件可能是错误的。

例如:我正在寻找bar / Foo.class并返回文件栏/ FOO.class。我需要识别这种情况并拒绝

检查返回的网址是否符合我的指定路径以区分大小写的方式的最佳方法是什么?

我正在考虑将指定的路径与URL的getPath结果进行比较。但是没有任何地方告诉我结果URL是否会使用我的给定路径或真实路径。因此,除非有人向我展示这是不同的和指定的文件,否则我不能确定情况总是这样。

1 个答案:

答案 0 :(得分:0)

问题在于您没有使用绝对路径来查找某个资源。因此,您的问题的答案只是您无法。对于不区分大小写的系统,路径上只能有一个文件" bar / foo.class" 来自任何一个环境。在这样的路径上可以存在多个文件的唯一方法是它们是否具有不同的绝对路径(例如/a/bar/foo.class和/b/bar/foo.class),在这种情况下它们具有不同的上下文(=有两个不同的文件夹" bar"它们都包含一个名为&#34的文件; foo.class")。

当搜索匹配非绝对路径的所有资源(如bar / foo.class)时,绝对不能保证系统上只有一个文件匹配该路径(匹配意味着文件的绝对路径) path包含您指定的路径)。此外,如果有多个匹配项,则无法保证它们的大小写会有所不同,因此使用区分大小写来验证哪个文件是错误的并不是一个好方法。此外,对于不区分大小写的系统,两个文件具有相同的名称,但只是位于不同的绝对位置(但与不同上下文相同的相对位置[读取:文件夹])。

如果可能,使用绝对路径搜索文件。这样,只有具有相同大小写的文件才会在区分大小写的系统上匹配,并且在该绝对路径上的一个文件(如果有的话)将匹配不区分大小写的系统。我希望这个答案对你更有用。