对于Class.getResouce(),双点表示法不再适用于classpth(使用eclipse时为bin)

时间:2016-02-16 22:36:20

标签: java eclipse maven getresource

加载资源文件的一种常用方法是使用int elements[2] = {COLOR_HIGHLIGHT,COLOR_HIGHLIGHTTEXT}; DWORD newColors[2]; newColors[0] = Color::IndianRed.ToArgb(); newColors[1] = Color::Maroon.ToArgb(); SetSysColors(2,elements,newColors); 方法,该方法从应用程序的Class.getResource(String name)进行搜索。

classpath甚至可以使用双点表示法从项目文件夹外读取文件。例如,使用eclipse,您可以使用FileReader阅读workspace/test.txt。但是当我使用../test.txt方法时,当文件位于getResource()文件夹下时,它只能获得带有双点表示法的文件。如果将文件放在bin文件夹之外,则双点表示法不再起作用。我尝试将源代码关注到binClassLoader.getResource()ClassLoader.parent.findResouce(),但无法进一步了解。这是在Windows 10上。

我应该在这里添加一个例子。我在eclipse中有一个test.txt文件和Java project1。

sun.misc.Launcher$AppClassLoader

可以从

中读取test.txt文件
workspace/project1/src/package1/test.java 

使用FileReader的“../test.txt”位置(eclipse的默认位置似乎是workspace / project1 /)。但是使用getResouce(),只要文件放在workspace / project1 / bin中但不在bin文件夹之外,双点表示法就会起作用。

我对上述内容有一些疑问:

1,为什么双点表示法不能带你离开workspace/test.txt 的{​​{1}}文件夹但可以用bin执行此操作?

2,考虑到getResouce()的行为,我假设eclipse成功地将FileReader目录添加到项目getResouce()。在项目的bin文件中,还有另一行:

classpath

.classpath文件夹是否未添加到<classpathentry kind="src" path="src"/> ?由于src似乎没有在那里搜索。

1 个答案:

答案 0 :(得分:1)

  

为什么双点表示法不能带你进入带有getResouce()的bin文件夹,但可以用FileReader做到这一点?

因为他们正在寻找不同命名空间中的文件。在FileReader情况下,命名空间是文件系统命名空间,其根是系统的根目录。在getResource()情况下,命名空间是与类路径对应的命名空间。该命名空间的顶部通常对应于类路径上的任何目录,以及类路径上任何归档的根索引。

在任何一种情况下,您都不能使用“..”在名称空间的顶部导航。

  

当eclipse本地运行应用程序时,eclipse是否也将'src'目录添加到类路径中?

默认情况下,我认为答案是否定的。显然,您可以通过启动器配置属性更改它。

如果要确定运行时类路径到底是什么,请打印出以下值:

    System.getProperty("java.class.path")