下面这段代码运行良好
getClass().getResource("/index.xml");
但是,当我进行完全重构时
getClass().getResource("/index.html");
上面的代码行抛出了NullPointerException。我知道我的重构是正确的,因为我使用了集成开发环境的智能重构来重命名文件,即文件index.html肯定存在于同一目录中。只要我切换回
getClass().getResource("/index.xml");
一切又好起来了。有什么原因只有.xml扩展可以工作吗?
发布于 2011-09-10 10:48:55
所以,大多数其他的答案是,类/类加载器不应该查看文件扩展名,您可以编写一个ClassLoader
来实现这一点,但这会很奇怪。
我要试试你的问题所在。我猜是使用某个IDE (您没有指定哪个IDE)将某些文件从源文件夹复制到目标文件夹( jar或类和资源的目录)。对于Java代码,您需要的是编译后的.class
对象文件,而不是.java
源代码。因此,IDE将被配置为使用一些合理的默认魔术,仅复制具有特定扩展名的文件。HTML文件用于旧的包JavaDocs (package-info.html
而不是package-info.java
,它可以包含包范围的注释),因此可以说在默认情况下排除它是合理的。
因此,您应该调查项目在这方面所做的工作,并相应地更改任何配置。
发布于 2011-09-10 08:15:57
正如@a_horse_with_no_name提到的,使用getResourceAsStream( )
应该可以很好地处理任何文件和任何扩展名。
我倾向于相信(根据提供的信息)您的IDE在重构之后没有正确地刷新它的文件层次结构。我建议对你的项目进行一次完整的清理和构建,看看这是否对情况有帮助。
发布于 2011-09-10 08:11:14
使用getResourceAsStream()
应该适用于任何文件扩展名(至少对我来说是这样)
https://stackoverflow.com/questions/7370433
复制相似问题