如何在 Java 中检索外部 .properties 文件?
How can I retrieve an external .properties file in Java?
我在尝试从项目外部目录加载属性文件时遇到以下问题。
所以我的项目有以下结构:
PROJECT-ROOT
|
|
|-----> confi
|
|------> src
|
|
|------> mainPkg (the package name)
|
|
|------> Main (the main class containing the main() method)
好的,进入主目录 class 我需要加载位于项目根文件夹外的 config.properties 文件(例如在同一级别) .所以我认为 config.properties 文件在应用程序 class 路径之外。
所以我尝试这样做:
InputStream input = new FileInputStream("../../config.properties");
或
InputStream input = new FileInputStream("../../../config.properties");
但不工作,因为我得到以下异常:
java.io.FileNotFoundException: ..\..\config.properties (Impossibile trovare il file specificato)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at mainPkg.Main.main(Main.java:41)
如果我使用这样的绝对路径,它会起作用:
InputStream input = new FileInputStream("C:\Projects\edi-sta\config.properties");
并正确检索 InputStrea 对象。但这对我的目的不利,因为我不能使用绝对路径。
如何使用相对路径检索位于项目根文件夹同一级别的 config.properties 文件?
您的项目根目录 将是您程序的当前工作目录。所以,你应该试试
InputStream input = new FileInputStream("../config.properties");
但这不是推荐的设置。该文件应该放在项目目录中,并且应该在您发布应用程序时适当地打包。
如果 config.properties 文件不在 class 路径中,您应该使用文件夹作为起点(例如用户文件夹或当前工作文件夹)。
相反,如果文件在您的 class 路径中,您可以尝试使用 this.class.getResourceAsStream 或 this.class.getClassLoader().getResourceAsStream().
在简单的上下文中,两种调用之间的区别非常简单:
this.class.getResoursceAsStream("config.properties") 将 return 一个 InputStream 当且仅当文件位于调用该方法的 class 的同一个包中时。
相反,this.class.getClassLoader().getResourceAsStream("config.properites") 仅当文件位于 classpath 的根目录时才会 return 相同的 InputStream。在这种情况下,您必须将 "config" 文件夹添加到 classpath
我在尝试从项目外部目录加载属性文件时遇到以下问题。
所以我的项目有以下结构:
PROJECT-ROOT
|
|
|-----> confi
|
|------> src
|
|
|------> mainPkg (the package name)
|
|
|------> Main (the main class containing the main() method)
好的,进入主目录 class 我需要加载位于项目根文件夹外的 config.properties 文件(例如在同一级别) .所以我认为 config.properties 文件在应用程序 class 路径之外。
所以我尝试这样做:
InputStream input = new FileInputStream("../../config.properties");
或
InputStream input = new FileInputStream("../../../config.properties");
但不工作,因为我得到以下异常:
java.io.FileNotFoundException: ..\..\config.properties (Impossibile trovare il file specificato)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:120)
at java.io.FileInputStream.<init>(FileInputStream.java:79)
at mainPkg.Main.main(Main.java:41)
如果我使用这样的绝对路径,它会起作用:
InputStream input = new FileInputStream("C:\Projects\edi-sta\config.properties");
并正确检索 InputStrea 对象。但这对我的目的不利,因为我不能使用绝对路径。
如何使用相对路径检索位于项目根文件夹同一级别的 config.properties 文件?
您的项目根目录 将是您程序的当前工作目录。所以,你应该试试
InputStream input = new FileInputStream("../config.properties");
但这不是推荐的设置。该文件应该放在项目目录中,并且应该在您发布应用程序时适当地打包。
如果 config.properties 文件不在 class 路径中,您应该使用文件夹作为起点(例如用户文件夹或当前工作文件夹)。
相反,如果文件在您的 class 路径中,您可以尝试使用 this.class.getResourceAsStream 或 this.class.getClassLoader().getResourceAsStream().
在简单的上下文中,两种调用之间的区别非常简单: this.class.getResoursceAsStream("config.properties") 将 return 一个 InputStream 当且仅当文件位于调用该方法的 class 的同一个包中时。
相反,this.class.getClassLoader().getResourceAsStream("config.properites") 仅当文件位于 classpath 的根目录时才会 return 相同的 InputStream。在这种情况下,您必须将 "config" 文件夹添加到 classpath