Java getResourceAsStream用法详解与示例

需积分: 5 0 下载量 55 浏览量 更新于2024-08-04 收藏 2KB MD 举报
在Java编程中,`getResourceAsStream` 是一个重要的类方法,用于从当前运行环境(如类路径、Web应用根目录或特定上下文)加载资源文件。这个方法在不同的场景中有多种用法,主要根据资源文件的位置和需求来选择合适的调用方式。 1. Class.getResourceAsStream(String path): - 当路径参数`path`不以`/`开头时,它默认从当前类所在的包下寻找资源。这意味着如果有一个名为`me.class`的类,并且想加载同包下的`myfile.xml`,则可以使用`me.class.getResourceAsStream("myfile.xml")`。 - 如果`path`以`/`开头,表示资源位于类路径的根下,如整个项目或jar文件中,例如`"/com/x/file/myfile.xml"`。 2. Class.getClassLoader.getResourceAsStream(String path): - 这个方法直接使用ClassLoader加载资源,也是从类路径的根下查找,但`path`不能以`/`开头。对于不在类内但位于项目结构中的文件,可以使用这种方式,如`getClassLoader().getResourceAsStream("com/x/file/myfile.xml")`。 3. ServletContext.getResourceAsStream(String path): - 在Web应用环境中,如Servlet或JSP,可以使用`ServletContext`对象来获取资源。资源默认是从Web应用的根目录查找,`path`的开头是否包含`/`通常取决于容器实现,如Tomcat下`path`可以带或不带。 4. Jsp中的application内置对象: - JSP中的`application`对象实际上是`ServletContext`的一个实现,可以用来获取Web应用资源。 在实际使用中,根据资源文件的位置和应用的需求,可以选择以下写法: - 如果资源在类文件同级或子目录下,使用`getResourceAsStream`,如`me.class.getResourceAsStream("myfile.xml")`或`me.class.getResourceAsStream("file/myfile.xml")`。 - 要访问整个项目或跨包的资源,或者在Web应用中跨目录获取,可以使用`getClassLoader().getResourceAsStream`,如`getClassLoader().getResourceAsStream("/com/x/file/myfile.xml")`。 `getResourceAsStream` 方法的使用关键在于正确构造路径,以便找到所需的资源。理解路径的起点(包下、类路径根、Web应用根)以及路径的分隔符规则,能够帮助你高效地处理各种资源加载情况。

java.lang.ExceptionInInitializerError at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:422) at org.junit.runners.BlockJUnit4ClassRunner.createTest(BlockJUnit4ClassRunner.java:195) at org.junit.runners.BlockJUnit4ClassRunner$1.runReflectiveCall(BlockJUnit4ClassRunner.java:244) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.BlockJUnit4ClassRunner.methodBlock(BlockJUnit4ClassRunner.java:241) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229) at org.junit.runners.ParentRunner.run(ParentRunner.java:309) at org.junit.runner.JUnitCore.run(JUnitCore.java:160) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:235) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:54) Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error building SqlSession. ### The error may exist in mappers/categoryMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource mappers/categoryMapper.xml at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:82) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:66) at Test.<clinit>(Test.java:19) ... 23 more Caused by: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration. Cause: java.io.IOException: Could not find resource mappers/categoryMapper.xml at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:115) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parse(XMLConfigBuilder.java:95) at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80) ... 25 more Caused by: java.io.IOException: Could not find resource mappers/categoryMapper.xml at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:114) at org.apache.ibatis.io.Resources.getResourceAsStream(Resources.java:100) at org.apache.ibatis.builder.xml.XMLConfigBuilder.mapperElement(XMLConfigBuilder.java:338) at org.apache.ibatis.builder.xml.XMLConfigBuilder.parseConfiguration(XMLConfigBuilder.java:113) ... 27 more

137 浏览量