我有一个名为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.Is系统只读了一次,然后我读了文件,它只是从内存中获取输入流? 但是当我使用下面的代码时,它会正常工作:
InputStream inStream = new FileInputStream(new File(strPath));
我用谷歌搜索,但我没有找到任何帮助,这个问题让我很困惑,任何帮助都会很感激。
答案 0 :(得分:2)
您需要了解类路径是什么。
简而言之,Java有一个classpath的概念,它包含了它需要运行的所有资源(.class
文件,.properties
文件以及任何真正的文件)。当您使用ClassLoader#getResourceAsStream(String)
时,您实际上获得了类路径资源的InputStream
。此资源可以是磁盘上的物理资源,也可以是存档。
当您使用FileInputStream
时,您将获得磁盘上文件的InputStream
。
InputStream
中的ClassLoader
和FileInputStream
中的{{1}}与同一文件不对应。
您应该了解IDE(或任何构建系统)如何处理文件。