当前位置: 首页 > 面试题库 >

在JAR文件之外读取属性文件

陆承宣
2023-03-14
问题内容

我有一个JAR文件,我的所有代码都已存档以便运行。我必须访问一个属性文件,每次运行前都需要对其进行更改/编辑。我想将属性文件保留在JAR文件所在的目录中。无论如何,有没有告诉Java从该目录中提取属性文件?

注意:我不想将属性文件保留在主目录中或在命令行参数中传递属性文件的路径。


问题答案:

因此,你希望将.properties与主/可运行jar相同文件夹中的文件视为文件,而不是作为主/可运行jar的资源。在这种情况下,我自己的解决方案如下:

首先,第一件事:你的程序文件架构应如下所示(假设你的主程序是main.jar,其主要属性文件是main.properties):

./ - the root of your program
 |__ main.jar
 |__ main.properties

使用这种体系结构,你可以在运行main.jar之前或运行时(取决于程序的当前状态)使用任何文本编辑器修改main.properties文件中的任何属性,因为它只是一个基于文本的文件。例如,你的main.properties文件可能包含:

app.version=1.0.0.0
app.name=Hello

因此,当你从主程序的根目录/基本目录运行主程序时,通常会这样运行它:

java -jar ./main.jar

或者,立即:

java -jar main.jar

main.jar中,你需要为main.properties文件中找到的每个属性创建一些实用程序方法。假设该app.version属性具有以下getAppVersion()方法:

/**
 * Gets the app.version property value from
 * the ./main.properties file of the base folder
 *
 * @return app.version string
 * @throws IOException
 */

import java.util.Properties;

public static String getAppVersion() throws IOException{

    String versionString = null;

    //to load application's properties, we use this class
    Properties mainProperties = new Properties();

    FileInputStream file;

    //the base folder is ./, the root of the main.properties file  
    String path = "./main.properties";

    //load the file handle for main.properties
    file = new FileInputStream(path);

    //load all the properties from this file
    mainProperties.load(file);

    //we have loaded the properties, so close the file handle
    file.close();

    //retrieve the property we are intrested, the app.version
    versionString = mainProperties.getProperty("app.version");

    return versionString;
}

在主程序中需要该app.version值的任何部分,我们按以下方式调用其方法:

String version = null;
try{
     version = getAppVersion();
}
catch (IOException ioe){
    ioe.printStackTrace();
}


 类似资料:
  • 问题内容: 我们为我们的一个应用程序提供了一个连接池组件(JAR文件)。截至目前,应用程序连接详细信息捆绑在JAR文件中(在文件中)。 我们可以使其更通用吗?我们可以让客户端告诉属性文件详细信息(路径和文件名),然后使用JAR来获得连接吗? 客户端代码中包含以下内容是否有意义: 与此同时,客户端将指定(以某种方式???)属性文件详细信息,其中包含要连接的URL,超时等。 问题答案: http://

  • 问题内容: 在我的目标文件夹中,有2个文件夹,lib和conf。所有的属性文件都放在conf文件夹中,而jars放在lib foulder中。 在Spring Boot之前,我们在spring.xml中使用以下配置来使用@value 但是在spring启动中,我不知道如何在Java代码中执行相同的操作。 我尝试了以下操作,但是没有用 问题答案: 问题的标题和描述让我有些困惑。希望我不会再让你对我的

  • 问题内容: 我正在整理一个.jar文件。我想创建一个非常简单的.properties文件,其中包含诸如用户名和其他内容之类的可配置内容,以便他们可以手动编辑,而不必包括GUI编辑器。 我想做的是能够按此顺序搜索: 指定的属性文件() 当前目录(调用Java的目录)中的MyApp.properties 用户目录中的MyApp.properties(user.home系统属性?) 存储应用程序.jar

  • 问题内容: 我创建了一个REST Web服务,在其中创建了config.properties文件来存储和检索整个应用程序中的一些用户名和密码。我将其存储在/src/main/resources/config.properties中。 当我尝试从eclipse的Java代码加载它时,它工作正常。但是当我将它部署在tomcat中时,它没有加载。我用来加载属性文件的代码是 谁能帮我解决这个问题 问题答案

  • 每个人都知道如果我们想要读取属性文件,我们可以这样做: 但是,现在我有了一个类似于SpringBoot的框架。它可以将Spring与Mybatis集成在一起。 问题是前面的代码只能读取我的项目类路径文件,但我需要使用我的框架读取project属性文件。我是怎么做的?

  • 问题内容: 有谁知道如何在Maven中读取文件。我知道有多种方法可以使用资源过滤来读取属性文件并从中设置值,但是我想要在中使用以下方法: 问题答案: 试用 Properties Maven插件