我正在尝试加载属性文件。这是我的结构
现在我正在尝试加载test.properties文件。但是我变得无效了。这是我在做什么
public class Test {
String workingDir = System.getProperty("user.dir");
System.out.println("Current working directory : " + workingDir);
File temp = new File(workingDir + "\\" + "test.properties");
String absolutePath = temp.getAbsolutePath();
System.out.println("File path : " + absolutePath);
Properties properties = null;
try {
properties = new Properties();
InputStream resourceAsStream = Test.class.getClassLoader().getResourceAsStream(absolutePath);
if (resourceAsStream != null) {
properties.load(resourceAsStream);
}
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
} //end of class Test
此程序打印
Current working directory : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration
File path : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties
但它没有从此路径加载属性文件。虽然它存在于那里。为什么我会变空?
由于
修改--- ----------------------------
String workingDir = System.getProperty("user.dir");
System.out.println("Current working directory : " + workingDir);
File temp = new File(workingDir, "test.properties");
String absolutePath = temp.getAbsolutePath();
System.out.println("File path : " + absolutePath);
try {
properties = new Properties();
InputStream resourceAsStream = new FileInputStream(temp);
if (resourceAsStream != null) {
properties.load(resourceAsStream);
}
} catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
Current working directory : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration
File path : D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties
java.io.FileNotFoundException: D:\Personal Work\eclipse 32 Bit\workspace\Spring Integration\LS360BatchImportIntegration\test.properties (The system cannot find the file specified)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at com.softech.ls360.integration.BatchImport.main(BatchImport.java:57)
答案 0 :(得分:26)
哦哦......这里有几个问题:
1)在您提供的第一个代码段中,您使用ClassLoader
来加载资源文件。这确实是一个很好的决定。但getResourceAsStream
方法需要“类路径相对”名称。你提供了一条绝对的道路。
2)您的第二个代码段(编辑后)导致无法找到文件“D:... \ LS360BatchImportIntegration \ test.properties”。根据您的截图,该文件应为“D:... \ LS360AutomatedRegulatorsReportingService \ test.properties”。这是另一个目录。
我担心,您的描述与您机器上的调查结果不符。
但是,让我们转向一个合理的解决方案:
1)在Eclipse项目中(截图告诉我们,您正在使用Eclipse),创建一个名为“resources”的新目录,其深度与“src”目录相同。复制 - 或更好地移动 - 将属性文件放入其中。
2)必须将此新目录放入“构建路径”。在Package Explorer或Project Explorer视图中右键单击该目录,选择“Build Path”,然后选择“Use as Source Folder”。注意:当您运行项目时,此构建路径将是项目的类路径。
3)由于资源目录现在是您的类路径的一部分并包含您的属性文件,您只需使用getResourceAsStream("test.properties")
加载它。
修改
我只是看到,你也使用Maven(pom.xml文件)。在Maven中,默认存在这样的资源目录,它是构建路径的一部分。它是“src / main / resources”。如果是这样,请使用它。
答案 1 :(得分:9)
您正在使用类加载器(在类路径中读取),而您使用的是绝对路径。
只需尝试:
InputStream resourceAsStream = new FileInputStream(temp);
作为旁注,请尝试将文件设置为:
File temp = new File(workingDir, "test.properties");
使用系统相关的路径指示符。
答案 2 :(得分:8)
请将您的属性文件放在/ src / main / resources文件夹中并从ClassLoader加载。它将被修复。
像
/src/main/resources/test.properties
Properties properties = null;
try {
properties = new Properties();
InputStream resourceAsStream = Test.class.getClassLoader().getResourceAsStream("test.properties");
if (resourceAsStream != null) {
properties.load(resourceAsStream);
}
} catch (IOException e) {
e.printStackTrace();
}
答案 3 :(得分:0)
您将文件路径传递给getResourceAsStream(String name)
,但name
这里是类路径,而不是文件路径......
您可以确保该文件位于类路径中,或者改为使用FileInputStream
。
答案 4 :(得分:0)
我遇到类似的问题,getResourceAsStream()
找不到文件。该文件位于资源文件夹(src/main/resources
)中,但仍未找到。
当我进入eclipse Package Explorer并且&#34;刷新&#34;问题得到了解决。资源文件夹。它在目录中,但是在刷新文件夹之前Eclipse没有看到它(右键单击该文件夹并选择Refresh)。
答案 5 :(得分:0)
我希望这会有所帮助! 您可以将test.properties保留在src / main / resources
中 public static Properties props = new Properties();
InputStream inStream = Test.class.getResourceAsStream("/test.properties");
try {
loadConfigurations(inStream);
} catch (IOException ex) {
String errMsg = "Exception in loading configuration file. Please check if application.properties file is present in classpath.";
ExceptionUtils.throwRuntimeException(errMsg, ex, LOGGER);
}
public static void loadConfigurations(InputStream inputStream) throws IOException{
props.load(inputStream);
}