如何在EclipseJava动态Web项目中使用.properties文件?
我正在Eclipse中开发一个动态Web项目。我为存储数据库详细信息(用户名、密码等)创建了一个.properties文件。我通过右键单击项目和New->File添加了它。我使用了Javautil包属性类。但它不起作用。我无法从文件中检索任何属性。这是我使用的代码如何在EclipseJava动态Web项目中使用.properties文件?,java,eclipse,jakarta-ee,properties,Java,Eclipse,Jakarta Ee,Properties,我正在Eclipse中开发一个动态Web项目。我为存储数据库详细信息(用户名、密码等)创建了一个.properties文件。我通过右键单击项目和New->File添加了它。我使用了Javautil包属性类。但它不起作用。我无法从文件中检索任何属性。这是我使用的代码 Properties prop = new Properties(); try { prop.load(new FileInputStream("database.properties"));
Properties prop = new Properties();
try {
prop.load(new FileInputStream("database.properties"));
String db = prop.getProperty("database");
String userName = prop.getProperty("dbuser");
String password = prop.getProperty("dbpassword");
} catch (IOException ex) {
ex.printStackTrace();
}
是否有问题或是否有任何特定位置应放置属性文件。尝试提供属性文件的绝对路径或相对路径,同时检查此属性文件路径是否已添加到源文件夹,如果没有,则不会复制到您的类文件夹。(右键单击project,检查source选项卡下的java构建路径。您应该使用更可移植的
java.util.Properties#load(InputStream)
,结果是javax.servlet.ServletContext#getResourceAsStream(String)
您应该在使用它的类的同一个包中有.Properties文件
或者更好的方法是,使用getResourceAsStream
方法读取属性文件(否则,当您在.war存档中有文件时,您可能会遇到一些问题)
通常,确保属性文件位于项目运行时类路径(例如WEB-INF/classes)中,然后使用系统类加载器或属性文件处理程序的类加载器加载它,即(从内存徒手键入-未编译)
我打赌您没有指向正确的位置。请确保您的属性文件位于正确的位置。使用该代码,我相信它正在查找
${CURRENT\u WORKING\u DIR}/database.properties
,eclipse中的web应用就是web-INF/classes
(我想).您所做的是正确的,即右键单击项目和新建文件。您必须将属性放在启动jvm的位置。请查看附件中的图像。属性文件标记为红色。查看属性文件是否也位于类似的位置。
还要在代码中添加以下内容,以确定文件的存放位置:
System.out.println(new File(".").getAbsolutePath());
有关更多详细信息,请点击此链接-
似乎在查找database.properties时遇到了问题。它位于哪里?它与您的类在同一个包中吗?是的!我刚刚发现我给出的路径指向eclipse文件夹。您的意思是我应该将.properties文件保存在类使用.properties文件的包中吗?@Dilma:这不是严格必要的你可以把它放在任何地方,但至少确保它在运行时类路径中是最容易的(也是更好的做法)。它甚至不需要是源文件夹——只需要声明为资源位置的某个地方(例如ext文件夹).yeah!我刚刚发现我给出的路径是指eclipse文件夹。我检查了该图像。在这里,您使用了.properties文件的绝对路径。但是当我主持项目时,某些地方不起作用(给出绝对路径)。我只是想知道是否有任何标准的方法来保存和访问.properties文件。谢谢!这不是使用属性文件的正确方法。不建议使用绝对路径。如果您的文件是C:\\a.properties,并且您使用完整路径,明天您将在linux中部署WAR,这将不起作用。请参阅Nitind应答这是正确的方法我们必须将该文件放在Maven项目的{YourApp}\src\main\resources中,以及非Maven动态Web项目的WebContent下
try{
Properties p = new Properties();
InputStream in = MyPropertyHandler.getClass()
.getClassLoader()
.getResourceAsStream("com/package/props/database.properties");
p.load(in);
catch(IOException e){
e.printStackTrace(System.err);
}
System.out.println(new File(".").getAbsolutePath());