如何在Java中检索外部.properties文件?
尝试从项目外部的目录加载属性文件时遇到以下问题 因此,我的项目具有以下结构:如何在Java中检索外部.properties文件?,java,file,jakarta-ee,inputstream,properties-file,Java,File,Jakarta Ee,Inputstream,Properties File,尝试从项目外部的目录加载属性文件时遇到以下问题 因此,我的项目具有以下结构: PROJECT-ROOT | | |-----> confi | |------> src | | |------> mainPkg (the package name) |
PROJECT-ROOT
|
|
|-----> confi
|
|------> src
|
|
|------> mainPkg (the package name)
|
|
|------> Main (the main class containing the main() method)
好的,我需要将config.properties文件加载到主类中,该文件位于项目根文件夹之外(例如,在同一级别)。因此我认为,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)
并正确检索InputStrea对象。但这对我的目的不好,因为我不能使用绝对路径
如何使用相对路径检索与项目根文件夹位于同一级别的config.properties文件?项目根将是程序的当前工作目录。所以,你应该试试看
InputStream input = new FileInputStream("../config.properties");
但是,这不是建议的设置。该文件应放在项目目录中,并且在发布应用程序时应进行适当的jar处理。项目根目录将是程序的当前工作目录。所以,你应该试试看
InputStream input = new FileInputStream("../config.properties");
但是,这不是建议的设置。该文件应放在项目目录中,并且在发布应用程序时应适当地加罐。如果config.properties文件超出类路径,则应使用文件夹作为起点(例如用户文件夹或当前工作文件夹) 相反,如果文件在类路径中,则可以尝试使用this.class.getResourceAsStream或this.class.getClassLoader().getResourceAsStream() 在一个简单的上下文中,两个调用之间的区别非常简单: 当且仅当文件位于调用该方法的类的同一包中时,此.class.getResourcesCeasStream(“config.properties”)将返回InputStream
相反,此.class.getClassLoader().getResourceAsStream(“config.properites”)仅当文件位于类路径的根上时才会返回相同的InputStream。在这种情况下,您必须将“config”文件夹添加到类路径如果config.properties文件超出类路径,您应该使用文件夹作为起点(例如用户文件夹或当前工作文件夹) 相反,如果文件在类路径中,则可以尝试使用this.class.getResourceAsStream或this.class.getClassLoader().getResourceAsStream() 在一个简单的上下文中,两个调用之间的区别非常简单: 当且仅当文件位于调用该方法的类的同一包中时,此.class.getResourcesCeasStream(“config.properties”)将返回InputStream
相反,此.class.getClassLoader().getResourceAsStream(“config.properites”)仅当文件位于类路径的根上时才会返回相同的InputStream。在这种情况下,您必须将“config”文件夹添加到类路径注意:在执行过程中,您的相对路径是相对于工作目录的,而不是包含源文件的目录。在开发过程中,在IDE中,您可以在启动器中设置工作目录。在生产环境中,您可以使用MyClass.class.getProtectionDomain().getCodeSource().getLocation()计算jar文件位置的绝对路径,然后应该从当前工作目录中读取,或者使用命令行参数指定。注意:在执行过程中,您的相对路径是相对于工作目录的,而不是包含源文件的目录。在开发过程中,在IDE中,您可以在启动器中设置工作目录。在生产环境中,您可以使用MyClass.class.getProtectionDomain().getCodeSource().getLocation()从jar文件位置计算绝对路径。如果属性文件不包含在jar中,则应该从当前工作目录中读取,或者使用命令行参数指定。
InputStream input = new FileInputStream("../config.properties");