我想我确实想做他所做的事here
但与我相比,它有点不同。我开始检查文件是否存在:
File f = new File("properties.txt");
System.out.println(f.exists());
我没有其他帖子中描述的文件夹/project/WebContent/WEB-INF/classes
,但我编译的类在/project/build/classes
中,所以我把我的属性文件放在那里(确切地说:在类的包文件夹中)我在哪里访问该文件)。
但它仍会打印false
。也许我做错了,如果是的话,请告诉我。
答案 0 :(得分:2)
如果您的文件位于类路径或类文件夹中,而不仅仅是从类路径获取路径。不要使用java.io.File
的相对路径,它取决于您在JAVA代码中无法控制的当前工作目录。
您可以尝试这样:
URL url = getClass().getClassLoader().getResource("properties.txt");
File f = new File(url.getPath());
System.out.println(f.exists());
如果您的文件properties.txt
位于getResource(...)
函数中提供相对路径的任何包中。例如getResource("properties\\properties.txt")
。
答案 1 :(得分:1)
执行此操作的代码非常简单。我们假设你有一个名为SampleApp.war
的war文件,它的根目录下有一个名为myApp.properties
的属性文件:
SampleApp.war
|
|-------- myApp.properties
|
|-------- WEB-INF
|
|---- classes
|
|----- org
|------ myApp
|------- MyPropertiesReader.class
假设您要读取属性文件中存在的名为abc
的属性:
myApp.properties
中的:
abc = someValue;
xyz = someOtherValue;
让我们考虑您的应用程序中的类org.myApp.MyPropertiesReader
想要阅读该属性。这是相同的代码:
package org.myapp;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* Simple class meant to read a properties file
*
* @author Sudarsan Padhy
*
*/
public class MyPropertiesReader {
/**
* Default Constructor
*
*/
public MyPropertiesReader() {
}
/**
* Some Method
*
* @throws IOException
*
*/
public void doSomeOperation() throws IOException {
// Get the inputStream
InputStream inputStream = this.getClass().getClassLoader()
.getResourceAsStream("myApp.properties");
Properties properties = new Properties();
System.out.println("InputStream is: " + inputStream);
// load the inputStream using the Properties
properties.load(inputStream);
// get the value of the property
String propValue = properties.getProperty("abc");
System.out.println("Property value is: " + propValue);
}
}