我有一个名为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
。
来自 ClassLoader
的 InputStream
和来自 FileInputStream
的输入流不对应于同一个文件。
您应该了解您的 IDE(或任何构建系统)如何处理您的文件。
关于java - Thread.currentThread().getContextClassLoader().getResourceAsStream 多次读取属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24093257/