Java 在Eclipse动态web项目中加载属性?

Java 在Eclipse动态web项目中加载属性?,java,eclipse,netbeans,Java,Eclipse,Netbeans,代码: Netbean中的这段代码一直运行良好 但当我复制到eclipse时,它无法在运行项目时从属性文件加载信息 运行单个文件即可 我将属性文件放在默认包(Netbean)和/src/database.properties(Eclipse)中 请帮帮我 以下是一些日志: public void initialize() { Properties p = new Properties(); try { p.load(Thread.currentThread().

代码:

Netbean中的这段代码一直运行良好

但当我复制到eclipse时,它无法在运行项目时从属性文件加载信息

运行单个文件即可

我将属性文件放在默认包(Netbean)和/src/database.properties(Eclipse)中

请帮帮我

以下是一些日志:

public void initialize() {
    Properties p = new Properties();
    try {

        p.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties"));

        classForname = p.getProperty("classForname");
        url = p.getProperty("url");
        username = p.getProperty("user");
        password = p.getProperty("password");

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    System.out.println(classForname);
    System.out.println(url);
    System.out.println(username);
    System.out.println(password);
}

调试此文件的一些提示:

  • 不要把这么多东西放在一行:

     Apr 04, 2014 3:47:48 PM org.apache.catalina.core.StandardWrapperValve invoke
    SEVERE: Servlet.service() for servlet [Login] in context with path [/WebBasic] threw exception
    java.lang.NullPointerException: Connection is null !
        at my.Dao.ConnectDatabase.getConnect(ConnectDatabase.java:73)
        at my.Dao.UserDAO.checkUser(UserDAO.java:40)
        at my.Servlet.Login.processRequest(Login.java:46)
        at my.Servlet.Login.doGet(Login.java:86)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
        at java.lang.Thread.run(Unknown Source)
    
  • 您忘记关闭流(资源泄漏)

  • 您忘记检查流是否不是
    null
    (=告诉您Java找不到资源)

  • 查看文件夹
    bin/
    。是否有一个文件
    数据库.properties
    ?注意:在Eclipse中不能这样做,因为IDE隐藏了该文件夹的内容。使用操作系统的工具

  • 在代码中创建一个断点,并逐步遍历它以查看发生了什么


  • 你有例外吗?或者代码根本没有执行?我定义了一个异常,因为创建连接时没有信息。我觉得netbean和eclise之间的路径有些不同。您是否在读取属性时收到FileNotFoundException?@TanmayPatil:对于
    getResourceAsStream()
    ,没有
    FileNotFoundException
    ,它只返回
    null
    <代码>p.load(null)可能会抛出一个NPE。谢谢你的建议!你能告诉我“垃圾桶”在哪里吗?在tomcat或项目文件夹中?我在C:\Users\Terminator\Documents\Eclipse Projects\WebBasic\build\classes中有“database.properties”,这可能是您的
    bin/
    文件夹。要找到答案,请打开“项目属性”对话框,转到“Java构建路径”,打开“源代码”选项卡。我们查找的值位于“输出文件夹”下。请注意,它们可以有几个。如果
    database.properties
    文件可以在其中一个文件夹中找到就足够了(最好是连接到编辑该文件的源文件夹的文件夹…)
    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("database.properties");
    p.load(stream);