我有以下java代码,它从资源文件夹中读取config.properties
。
import java.io.InputStream;
import java.util.Properties;
public class TestProperties {
static ClassLoader classloader = Thread.currentThread().getContextClassLoader();
static InputStream input = classloader.getResourceAsStream("config.properties");
public static void main(String[] args) throws InterruptedException {
while (true) {
new TestProperties().readPropertiesFile();
Thread.sleep(2000);
}
}
private void readPropertiesFile() {
Properties properties = new Properties();
try {
properties.load(input);
int threads = Integer.parseInt(properties.getProperty("num_of_workers"));
System.out.println("num_of_workers: " + threads);
} catch (Exception e) {
System.out.println("hey something went wrong: " + e.getMessage());
}
}
}
结果:
它首先给我结果(num_of_workers: 2
),但之后它给出了空。
但是当我改变时
static ClassLoader classloader
至ClassLoader classloader
static InputStream input
至InputStream input
我得到了预期的结果:
你能解释一下这种行为吗?
答案 0 :(得分:0)
因为输入流只能使用一次, 在静态的情况下,它只被初始化一次并且你在第一次迭代中被消耗,但是在非静态的情况下,它总是在每次创建一个新实例时被创建为新的。