在关于类加载方法之间差异的一个流行答案中,乔恩·斯凯特(Jon
Skeet)说,
类加载器资源路径始终被视为绝对路径。
一个更受欢迎的答案通过一个例子肯定了这一说法。
ClassLoader.getResourceAsStream(path)
将所有路径视为绝对路径。因此,调用
String.getClassLoader().getResourceAsString("myfile.txt")
和
String.getClassLoader().getResourceAsString("/myfile.txt")
都会在您的类路径中的以下位置查找文件:
./myfile.txt
。
忽略示例无法编译的事实,共识表明领先的正斜杠与ClassLoader无关。
一个简单的测试则相反。
Foo.class.getClassLoader().getResource("test.xml") // file
Foo.class.getClassLoader().getResource("/test.xml") // null
我只是将路径添加files/test.xml
到测试项目的类路径中,而一个名为的类Foo
包含一个main()
打印这两个调用的结果的方法。自数百人投票赞成上述答案以来,我缺少什么?ClassLoader是绝对的,还是取决于输入名称的结构?
这篇Oracle博客文章有助于我的理解。
最终根据资源名称构造URL的方法是URLClassPath.JarLoader.checkResource()。
显然不是。
它是由类装载器来解释name
在getResource(name)
。
检查的源代码URLClassLoader
,最终它调用
new URL(baseURL, name)
在这里重要的name
是绝对的还是相对的
对于某些变量baseURL
,绝对变量/foo/bar
和相对变量foo/bar
可能具有相同的效果。特别是,类路径中的“
jar文件URL”
总是如此
baseURL: jar:file:/home/duke/duke.jar!/
foo/bar -> jar:file:/home/duke/duke.jar!/foo/bar
/foo/bar -> jar:file:/home/duke/duke.jar!/foo/bar
我正在尝试将资源csv文件传递到我的Sprint Boot应用程序使用的jar中。尽管方法获取的资源参数=ReactiveWebContext资源[src/main/Resources/file.csv],但我总是得到该文件不存在的响应 > 在我的项目中,文件位于src/main/resources/file中。csv 正在应用中。属性,我定义: 在config类中: 在内部jar:Config类
问题内容: 在Java中,您可以使用相同的API,但使用不同的URL协议来加载各种资源: 这很好地将资源的实际加载与需要资源的应用程序分离开来,并且由于URL只是一个字符串,因此资源加载也很容易配置。 是否有使用当前类加载器加载资源的协议?这类似于Jar协议,除了我不需要知道资源来自哪个jar文件或类文件夹。 我当然可以使用来做到这一点,但这需要我使用不同的API,因此需要对现有代码进行更改。我希
问题内容: 是否有API可以获取类路径资源(例如,我将从中获得的资源)?理想情况下,我想将新的API与类路径资源一起使用。 问题答案: 这对我有用:
是否有API来获取类路径资源(例如,我从)作为获取的类路径资源?理想情况下,我希望使用带有类路径资源的新的API。
本文向大家介绍相对路径和绝对路径的写法总结,包括了相对路径和绝对路径的写法总结的使用技巧和注意事项,需要的朋友参考一下 在C#中 “\”是特殊字符,要表示它的话需要使用“\\”。由于这种写法不方便,C#语言提供了@对其简化。 只要在字符串前加上@即可直接使用“\”。所以上面的路径在C#中应该表示为“Book”,@“\Tmp\Book”,@“C:\Tmp\Book”。 相对路径使用“/”字符作为目录
上面是我的程序,错误显示为: 可能的问题是什么?请帮忙,因为我是新来的 我面临着同样的问题,我该如何解决?