把外部文件放在eclipse中相对来说

时间:2012-07-09 11:56:22

标签: java eclipse

我有src文件夹,里面有很多软件包,其中一个是hibernate.util。

之前我已将hibernate.cfg.xml放在src文件夹中并给出了它的绝对路径,现在因为我必须部署这个应用程序,绝对路径给我带来了问题。

我尝试添加一个新的资源文件夹作为源文件夹,将其包含在源文件夹中,将其添加到类路径中但每次都找不到文件

我正在使用eclipse IDE

SEVERE: Allocate exception for servlet sandbox
java.io.FileNotFoundException: .\resources\hibernate.cfg.xml (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2216)
    at dal.utils.HibernateUtils.buildSessionFactory(HibernateUtils.java:25)
    at dal.utils.HibernateUtils.<clinit>(HibernateUtils.java:19)
    at dal.service.CalcDataMapper.load(CalcDataMapper.java:17)
    at com.renturduniya.www.sandbox.init(sandbox.java:41)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1206)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:827)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
    at java.lang.Thread.run(Unknown Source)

4 个答案:

答案 0 :(得分:0)

你不应该传递一个文件。文件表示文件系统上的路径。您的配置文件应与jar / war一起捆绑在应用程序的类中,并使用类加载器加载。

您应该使用method taking a URL as argument代替,并将

返回的网址传递给它
SomeClassOfYourWebApp.class.getResource(
    "/the/package/where/the/file/is/hibernate.cfg.xml");

答案 1 :(得分:0)

如果您在hibernateUtil类中对值进行了硬编码,请尝试使用/resources/hibernate.cfg.xml之类的正斜杠。如果没有尝试做这样的事情

    URL url = hibernateUtil.class.getClassLoader().getResource(
                    "hibernate.cfg.xml");
   // Now try to get the get path of the file using 
    url.getPath();

我认为这有助于你。

答案 2 :(得分:0)

外部文件始终是绝对路径。

答案 3 :(得分:0)

处理此问题的最佳方法是使用类加载器。

Whatever.class.getClassLoader().getResource("name");

因为这实际上会考虑类路径。

否则,相对路径名将相对于工作目录,而不是源树

请注意,在 Eclipse 运行配置中,您在 Arguments 标签中有一个名为工作目录的设置,默认为您的项目文件夹。对于多个运行配置,您可以使用不同的工作文件夹(这样,应用程序的不同配置)。

常见的目录布局可能是:

bin/     compiled classes, in classpath
src/     source files, not used at runtime
site1/   configuration for running site 1
site2/   configuration for running site 2

然后将文件放在:

site1/resources/hibernate.cfg.xml
site2/resources/hibernate.cfg.xml

并将工作文件夹设置为site1site2