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

Java Thread.currentThread().getContextClassLoader().getResourceAsStream多次读取属性文件,java,Java,我有一个名为sysconfig.properties的属性文件,我想多次读取它,因为它是可变的。但是我发现,当我更改sysconfig.properties的内容时,我读取了可修改的内容,这与我第一次读取systemconfig.properties文件时的情况相同。sysconfig.propertes文件的内容如下: isInitSuccess=TRUE isStartValid=2013 isInitSuccess=FALSE isStartValid=2013 InputStream

我有一个名为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
isStartValid=2013
isInitSuccess=FALSE
isStartValid=2013
InputStream inStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath);     
读取属性文件的代码如下所示:

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

来自
ClassLoader
InputStream
和来自
FileInputStream的
InputStream
不对应于同一个文件


您应该仔细阅读IDE(或任何构建系统)如何处理文件。

非常感谢,您告诉了我很多关于类路径的信息(我是java develop的新手)。“类加载器的输入流和文件输入流的输入流不对应于同一个文件。”这是对的。但是在我的特定情况下,它们对应于同一个文件。可能在我的CLAPATH中有一些文件都称为sysconfig.properties文件,但是文件的内容必须相同。内容是:isInitSuccess=TRUE isStartValid=2013,但当我将内容更改为:isInitSuccess=TRUE*************isStartValid=2013**********之后,我停止了程序并重新启动它,类加载器的InputStream和FileInputStream读取内容的InputStream都是相同的,因此我可以保证它们读取相同的文件。