首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类加载器

类加载器
EN

Stack Overflow用户
提问于 2009-02-23 11:12:46
回答 1查看 562关注 0票数 0

我在类加载器方面遇到了问题。一直。

有时有效,有时不起作用。

当我开始的时候,我已经测试了这个工作,但不是从*.jar:

URL url = AcAnalyzer.class.getResource("../stuff/resource");

//甚至在jar文件中也可以使用:

URL url = Acnalyzer.class.getResource("/stuff/resource");

URL url = AcAnalyzer.class.getClassLoader().getResource("stuff/resource");

//但是我遇到了tomcat..when的问题,我需要将它部署到tomcat中,我必须这样做:

URL url = Thread.currentThread().getContextClassLoader().getResource("something.xml");

其中类必须在WEB-INF/ something.xml /中

..。url.getFile();

//问题是大部分时间它必须在jar内工作,而不是同时在jar内工作。现在我已经测试了我的类在哪里获取资源,jar文件被用在一些部署在tomcat..and下的项目中,不知何故,它不想再工作了:

我对类加载器有点困惑:) ..如何获取这些资源?并同时进行了工作试验。

URL url = Thread.currentThread().getContextClassLoader().getResource("com/st/resource");

代码语言:javascript
复制
    FileInputStream inputStream = new FileInputStream(url.getFile());

java.io.FileNotFoundException: file:/home/aaa/.m2/repository/com/st/module-1.1-SNAPSHOT.jar!/com/st/resource (没有这样的文件或目录)

感谢您的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-02-23 11:17:39

我不确定第一部分中的确切问题是什么,尽管我建议不要在资源路径中使用"../“。

对于第二部分,如果你想加载一个资源,你不应该使用FileInputStream -你应该使用getResourceAsStream()而不是getResource().getFile()。只需从InputStream加载即可-并不总是可以使用FileInputStream加载单个文件。

编辑:引用资源的两种方式是ClassLoader.getResourceClass.getResource (以及带有AsStream后缀的等价物)。它们之间的区别(据我所知唯一的区别,尽管可能还有其他的)是,Class.getResource将给定的路径视为相对于您调用它的类的包。所以

代码语言:javascript
复制
ClassLoader.getResource("foo/bar/baz/test.xml")

等同于

代码语言:javascript
复制
foo.bar.SomeClass.class.getResource("baz/test.xml");

至于Class.getClassLoader()Thread.getContextClassLoader()之间的区别,我不会声称有很好的理解--我建议你单独问这个问题。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/577280

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档