java - Thread.currentThread().getContextClassLoader().getResourceAsStream 多次读取属性文件

标签 java

我有一个名为sysconfig.properties的属性文件,我想多次读取它,因为它是可变的。但是我发现当我更改sysconfig.properties的内容时,我读取了不可变的内容,即与第一次读取systemconfig.properties文件时的情况相同。sysconfig.propertes文件内容如下:

isInitSuccess=TRUE
isStartValid=2013

有时可能会更改如下:

isInitSuccess=FALSE
isStartValid=2013

读取属性文件的代码如下:

InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);     

我使用代码多次读取文件,但每次“isInitSuccess”都是“TRUE”,即使我更改了isInitSuccess=FALSE。是否系统只读取了一次,然后我读取文件,它只是从内存中获取输入流? 但是当我使用下面的代码时,它会正常工作:

InputStream inStream = new FileInputStream(new File(strPath));

我用谷歌搜索,但没有找到任何帮助,这个问题让我很困惑,任何帮助将不胜感激。

最佳答案

您需要了解类路径是什么。

简而言之,Java 有一个类路径的概念,其中包括它运行所需的所有资源(.class 文件、.properties 文件以及任何实际内容)。当您使用ClassLoader#getResourceAsStream(String)时,您实际上获取的是类路径资源的InputStream。该资源可以是磁盘上的物理资源,也可以是存档中的资源。

当您使用FileInputStream时,您将获取磁盘上文件的InputStream

来自 ClassLoaderInputStream 和来自 FileInputStream 的输入流不对应于同一个文件。

您应该了解您的 IDE(或任何构建系统)如何处理您的文件。

关于java - Thread.currentThread().getContextClassLoader().getResourceAsStream 多次读取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093257/

相关文章:

java - 使用 Java 在 Excel 中打开文件

java - 如何使用 java 从 gcp 存储桶下载文件夹?

java - 转码只有在客户端超时后才完成?

java - Flink 不向 Graphite 发送指标

java - 尝试在 Eclipse 上创建基本的 tic tac toe 游戏时出现错误 'cannot be resolved to a type'

java - 从 gwt 中的谷歌地图获取位置详细信息

java - ArrayList的简单解释

java - 防止 GridBagLayout 调整列大小

java - 无法迭代列表 - JSTL

java - 无法正确退出或完成我的应用程序 android( Activity )