加载资源文件的一种常用方法是使用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
文件夹之外,则双点表示法不再起作用。我尝试将源代码关注到bin
,ClassLoader.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
似乎没有在那里搜索。
答案 0 :(得分:1)
为什么双点表示法不能带你进入带有getResouce()的bin文件夹,但可以用FileReader做到这一点?
因为他们正在寻找不同命名空间中的文件。在FileReader
情况下,命名空间是文件系统命名空间,其根是系统的根目录。在getResource()
情况下,命名空间是与类路径对应的命名空间。该命名空间的顶部通常对应于类路径上的任何目录,以及类路径上任何归档的根索引。
在任何一种情况下,您都不能使用“..”在名称空间的顶部导航。
当eclipse本地运行应用程序时,eclipse是否也将'src'目录添加到类路径中?
默认情况下,我认为答案是否定的。显然,您可以通过启动器配置属性更改它。
如果要确定运行时类路径到底是什么,请打印出以下值:
System.getProperty("java.class.path")