如何在Spring的运行时期间从文本文件中重新加载数据

时间:2019-06-06 06:20:38

标签: java spring spring-boot

我有一个简单的方法,可以逐行读取文本文件并将其作为List<Strings>返回。问题是,如果我在运行时更改文件并尝试再次调用该方法,它将仍然读取未更改的文件。

这是我的代码:

public List<String> generateStrings() throws Exception {

        InputStream stream = getClass().getResourceAsStream(FILE);
        BufferedReader reader = new BufferedReader(new InputStreamReader(stream));

        LinkedList<String> stringList = new LinkedList<>();
        String line = reader.readLine();

        while (line != null){
            stringList.add(line);

            line = reader.readLine();
        }

        log.debug("List generated");

        return stringList;
    }

是否有一种方法可以在每次调用该方法时重新加载该文件?

编辑:getClass().getClassLoader().getResource(FILE).openStream()

URL res = getClass().getClassLoader().getResource(FILE);
if (res != null) {
    URLConnection resConn = res.openConnection();
    resConn.setUseCaches(false);
    InputStream in = resConn.getInputStream();
}

抛出NullPointerException

编辑2: 取消了NullPointerException(我必须更改资源文件的路径),但仍然无法在运行时重新加载文件

编辑3: 当我尝试在Spring之外修复它时,似乎可以重新实例化整个类,但该类已注入到构造函数中的服务类中,因此我不知道如何在Spring中实现这种行为。

1 个答案:

答案 0 :(得分:1)

原因是getSourceAsStream在内部缓存。

您可以在此处找到更多信息: https://stackoverflow.com/a/3126572/1554844