一个java工程,文件路径等设置如下:
project
-src
-org
-test
-test.java
test.properties
-bin
-org
-test
-test.java
test.properties
其中在test.java中要载入test.properties文件。但是在eclipse中直接运行时说
java.io.FileNotFoundException: test.properties
我在test.java中的路径指定的是:test.properties
test.properties就在src目录之下。
但是我在外面通过命令行的形式运行 java org.test.test 是可以正常运行的,这是什么原因,如果我把test.properties直接放在工程下面就可以在eclipse里面正常运行,但是命令行的形式又说找不到文件了。
好像是鱼和熊掌不可兼得:(
有没有什么解决方法?有一点要明确地是:程序中只能写相对路径。
_________________________________________________________________________________________
(1)解决办法一:
你应该把test.properties放在那工程的下面!
或者如果你放到了src下``获取文件的路径的时候就应是 new File( "bin/test.properties ")了
(2)解决办法二:
采用:ClassLoader.getSystemResource("test.properties");
可以正确获得资源文件test.properties的绝对路径,例如:
“file:/D:/JworkSpace/RMIbasedDistributedDTIN/bin/test.properties”,因此,也就能够正确地定位资源文件了!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
附:
通用的相对路径解决办法
面对这个问题,我决定编写一个助手类ClassLoaderUtil,提供一个便利方法[public static URL getExtendResource(String relativePath)]。在Web应用程序等一切Java程序中,需要定位classpath外的资源时,都使用这个助手类的便利方法,而不使用 Web应用程序特有的ServletContext.getRealPath( "/ ")方法来定位资源。
利用classpath的绝对路径,定位所有资源
这个便利方法的实现原理,就是“利用classpath的绝对路径,定位所有资源”。
ClassLoader类的getResource( " ")方法能够得到当前classpath的绝对路径,这是所有Java程序都拥有的能力,具有最大的适应性!
而目前的JDK提供的ClassLoader类的getResource(String 相对路径)方法,只能接受一般的相对路径。这样,使用ClassLoader类的getResource(String 相对路径)方法就只能定位到classpath下的资源。
如果,它能够接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源,那么我们就可以定位位置的资源!
当然,我无法修改ClassLoader类的这个方法,于是,我编写了一个助手类ClassLoaderUtil类,提供了[public static URL getExtendResource(String relativePath)]这个方法。它能够接受带有“../”符号的相对路径,实现了自由寻找资源的功能。
http://blog.csdn.net/shendl/archive/2006/12/03/1427475.aspx
-org
-test
-test.java
test.properties
-bin
-org
-test
-test.java
test.properties
其中在test.java中要载入test.properties文件。但是在eclipse中直接运行时说
java.io.FileNotFoundException: test.properties
我在test.java中的路径指定的是:test.properties
test.properties就在src目录之下。
但是我在外面通过命令行的形式运行 java org.test.test 是可以正常运行的,这是什么原因,如果我把test.properties直接放在工程下面就可以在eclipse里面正常运行,但是命令行的形式又说找不到文件了。
好像是鱼和熊掌不可兼得:(
有没有什么解决方法?有一点要明确地是:程序中只能写相对路径。
_________________________________________________________________________________________
(1)解决办法一:
你应该把test.properties放在那工程的下面!
或者如果你放到了src下``获取文件的路径的时候就应是 new File( "bin/test.properties ")了
(2)解决办法二:
采用:ClassLoader.getSystemResource("test.properties");
可以正确获得资源文件test.properties的绝对路径,例如:
“file:/D:/JworkSpace/RMIbasedDistributedDTIN/bin/test.properties”,因此,也就能够正确地定位资源文件了!
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
附:
通用的相对路径解决办法
面对这个问题,我决定编写一个助手类ClassLoaderUtil,提供一个便利方法[public static URL getExtendResource(String relativePath)]。在Web应用程序等一切Java程序中,需要定位classpath外的资源时,都使用这个助手类的便利方法,而不使用 Web应用程序特有的ServletContext.getRealPath( "/ ")方法来定位资源。
利用classpath的绝对路径,定位所有资源
这个便利方法的实现原理,就是“利用classpath的绝对路径,定位所有资源”。
ClassLoader类的getResource( " ")方法能够得到当前classpath的绝对路径,这是所有Java程序都拥有的能力,具有最大的适应性!
而目前的JDK提供的ClassLoader类的getResource(String 相对路径)方法,只能接受一般的相对路径。这样,使用ClassLoader类的getResource(String 相对路径)方法就只能定位到classpath下的资源。
如果,它能够接受“../”这样的参数,允许我们用相对路径来定位classpath外面的资源,那么我们就可以定位位置的资源!
当然,我无法修改ClassLoader类的这个方法,于是,我编写了一个助手类ClassLoaderUtil类,提供了[public static URL getExtendResource(String relativePath)]这个方法。它能够接受带有“../”符号的相对路径,实现了自由寻找资源的功能。
http://blog.csdn.net/shendl/archive/2006/12/03/1427475.aspx