路径问题 ClassLoader.getSystemResourceAsStream() Javapath CLASSPATH InputStream

时间:2023-01-29 19:39:57
我用的Eclipse作为开发工具
----------------------------------------------------------------------------------
利用Eclipse创建Java Project工程
目录结构是:
  src--bissup----connfile--
                           !Tmp.java
                           !constantinfo.properties
                              
   Tmp.java文件内容:
   public static void main(String[] args) {
String url = "bissup/connfile/constantinfo.properties";
InputStream stream = ClassLoader.getSystemResourceAsStream(url);
if (stream != null ) {
System.out.println("read file OK!");
                   }
}
这个执行没有问题。
---------------------------------------------------------------------------------------
利用Eclipse创建Web Project工程
目录结构是:
  WebContent--
            !src--
            !     ------bissup---connfile--
            !                              !BissupServlet.java
            !                              !constantinfo.properties
            !WEB-INF--

BissupServlet.java里的代码

     protected void doPost(HttpServletRequest request,HttpServletResponse response){
String url = "bissup/connfile/constantinfo.properties";
InputStream stream = ClassLoader.getSystemResourceAsStream(url);
if (stream != null ) {
System.out.println("read file OK!");
                   }
    }
结果找不到文件,
其实两个工程的文件目录都是一样的(都是在Eclipse里调试运行的)
请问这是为什么呢?希望各位赐教

6 个解决方案

#1


因为你使用的是相对路径,在Web应用中和在Java应用中,相对路径的起始点是不一样的
Web应用中,相对路径的起始点是classes目录,而Java应用就不一定了。

#2


嗯,Tomcat的参考路径是它的bin目录,通常WEB应用我会用ServletContext来定位绝对路径.

#3


to:infowain(infowain) 
相对路径没有错
我也注意到这一点了
但是在 tomcat目录下
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\Samples\WEB-INF\classes\bissup\connfile
有constantinfo.properties 和BissupServlet.class 两个文件,在同一目录下

问题还是不行

#4


To:wenqiang_luo() 
请教一下具体的ServletContext操作
我我正在测试
String url =  "bissup/connfile/constantinfo.properties";
InputStream stream = null ; 

ServletContext   context  =   getServletContext();
stream = context.getResourceAsStream(url); 

把你的代码共享一下,我现在一头雾水

#5


解决不了,郁闷,大侠指点一下

#6


用这个classloader
Thread.currentThread().getContextClassLoader()

#1


因为你使用的是相对路径,在Web应用中和在Java应用中,相对路径的起始点是不一样的
Web应用中,相对路径的起始点是classes目录,而Java应用就不一定了。

#2


嗯,Tomcat的参考路径是它的bin目录,通常WEB应用我会用ServletContext来定位绝对路径.

#3


to:infowain(infowain) 
相对路径没有错
我也注意到这一点了
但是在 tomcat目录下
C:\Program Files\Apache Software Foundation\Tomcat 5.5\webapps\Samples\WEB-INF\classes\bissup\connfile
有constantinfo.properties 和BissupServlet.class 两个文件,在同一目录下

问题还是不行

#4


To:wenqiang_luo() 
请教一下具体的ServletContext操作
我我正在测试
String url =  "bissup/connfile/constantinfo.properties";
InputStream stream = null ; 

ServletContext   context  =   getServletContext();
stream = context.getResourceAsStream(url); 

把你的代码共享一下,我现在一头雾水

#5


解决不了,郁闷,大侠指点一下

#6


用这个classloader
Thread.currentThread().getContextClassLoader()