如何在Java中读取配置文件

55
我正在进行一个项目,构建一个线程池化的Web服务器,在这个项目中,我需要设置以下内容:
  • 服务器监听的端口号。
  • 线程池中有多少个线程。
  • 根目录的绝对路径,以及许多其他点。
一种方法是在代码中硬编码所有这些变量,我已经这样做了。但从职业角度来看,这并不好。现在,我想创建一个配置文件,在其中放置所有这些数据,并且在运行时,我的代码会获取这些数据。如何为上述任务创建配置文件?
3个回答

33

app.config

app.name=Properties Sample Code
app.version=1.09  

源代码:

Properties prop = new Properties();
String fileName = "app.config";
try (FileInputStream fis = new FileInputStream(fileName)) {
    prop.load(fis);
} catch (FileNotFoundException ex) {
    ... // FileNotFoundException catch is optional and can be collapsed
} catch (IOException ex) {
    ...
}
System.out.println(prop.getProperty("app.name"));
System.out.println(prop.getProperty("app.version"));

输出:

Properties Sample Code
1.09  

3
应用程序配置文件 app.config 存储在哪里? - Itération 122442
1
除了可执行文件,您可以将它放在任何地方并输入完整地址。 - Fakhredin Gholamizadeh
这个文件可以动态使用吗?比如从外部更改值。 - showtime

14

14
创建一个配置文件并在其中添加条目。
SERVER_PORT=10000     
THREAD_POOL_COUNT=3     
ROOT_DIR=/home/   

您可以使用Properties.load(fileName)加载此文件,并检索值,您可以使用get(key)


假设项目路径在您的类路径中,您可以将值ROOT_DIR=logs/设置为日志目录。您的日志将放置在“您的项目路径/ROOT_DIR”中。 - prasanth
由于我的项目名称是WebServer,那么我应该把日志放在哪里? - devsda
2
我解决了,File f = new File(System.getProperty("user.dir")+ File.separator + "src" + File.separator + "main" + File.separator + "resources" + File.separator + "server.properties"); 对我有效。 :) :) - devsda
1
你能解释一下你在答案中对fileName的理解吗?在我的逻辑中,将实际文件名字符串放入这样的变量中是很合理的 - 但我看到我必须在这里使用Reader/InputStream。 - Line
1
这个答案是不正确的 - 将文件名传递给Properties.load不起作用 - 它需要一个InputStreamReader,而不是一个String。https://docs.oracle.com/javase/7/docs/api/java/util/Properties.html - andydavies
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接