Java 使用FileInputStream从相对路径和绝对路径加载属性

Java 使用FileInputStream从相对路径和绝对路径加载属性,java,java-io,properties-file,Java,Java Io,Properties File,我已经编写了一个其他人使用的组件。 组件通过读取属性文件来配置自身。 组件的用户可以指定属性文件的路径。如果指定了路径,我可以使用FileInputStream从绝对路径加载这些属性文件,如下所示: Properties prop = new Properties(); InputStream input = new FileInputStream("C:\\me\\prop\\sample.properties"); prop.load(input); 我可以读取项目的src\main\r

我已经编写了一个其他人使用的组件。 组件通过读取属性文件来配置自身。 组件的用户可以指定属性文件的路径。如果指定了路径,我可以使用
FileInputStream
从绝对路径加载这些属性文件,如下所示:

Properties prop = new Properties();
InputStream input = new 
FileInputStream("C:\\me\\prop\\sample.properties");
prop.load(input);
我可以读取项目的
src\main\resources\properties
文件夹中的属性文件,如下所示:

properties.load(Thread.currentThread().getContextClassLoader().getResourceAsStream(properties\sample.properties));
这些属性在
myjar.jar\properties\sample.properties


我是否可以使用
FileInputStream
也从相对路径读取属性,这样我的属性加载器类中就不会有两种不同的方法?

您可以使用相对路径,但它将相对于java应用程序的工作文件夹。在IDE(f.e.Eclipse)中,您可以编写:

new FileInputStream("src/main/resources/properties/sample.properties");
因为工作文件夹是项目的根文件夹

它将找不到嵌入jar中的文件

如果请求文件对象,可以指向外部文件或嵌入资源:

File resource=new File(Ff.class.getResource("/org/json/CDL.class").getFile());

您可以使用相对路径,但它将与java应用程序的工作文件夹相对。在IDE(f.e.Eclipse)中,您可以编写:

new FileInputStream("src/main/resources/properties/sample.properties");
因为工作文件夹是项目的根文件夹

它将找不到嵌入jar中的文件

如果请求文件对象,可以指向外部文件或嵌入资源:

File resource=new File(Ff.class.getResource("/org/json/CDL.class").getFile());

我相信您不能对FileInputStream使用相对路径。虽然您可以直接尝试,但我相信您不能将相对路径与FileInputStream一起使用。尽管你可以直接试试。