我在a.properties文件里保存了一些信息,程序启动后修改并保存。
此时本地文件已经更新。但用ResourceBundle.getBundle再读取,取得的仍旧是修改前的内容。
推测是ResourceBundle有缓存机制造成的,问题是ResourceBundle没留清空缓存的接口。
变更其它的读取方法,改动的地方太多。该如何解决。
此时本地文件已经更新。但用ResourceBundle.getBundle再读取,取得的仍旧是修改前的内容。
推测是ResourceBundle有缓存机制造成的,问题是ResourceBundle没留清空缓存的接口。
变更其它的读取方法,改动的地方太多。该如何解决。
解决方案 »
- 请教高手帮看一个错误
- 字符串拼凑问题
- c++转换成java都要注意哪些?基本类型的格式要注意什么
- JAVA操作系统编程
- 这里有两个问题,很难。 需要高手,不过大家都来看看,不会的学习,也出点主意。(分可以加)
- 请高手来帮忙
- 如何将resultset中的对象转换成一个二维object 用于table中的显示
- 可以在程序中创建临时表吗?(用的是mysql数据库)
- DriverManager.Connect()到sql的问题。虽然分数不多,但只要问题解决就立即给!
- Eclipse写java程序出现的问题 Exception in thread "main" java.lang.NullPointerException
- 方法调用
- 急,关于查询内容导出到txt的问题
clearCache()是哪个类的方法,ResourceBundle没有呵
Class ResourceBundle
java.lang.Objectstatic void clearCache()
Removes all resource bundles from the cache that have been loaded using the caller's class loader.
--------------------------
装载资源绑定的时候,默认地就会对每个“绑定”检查,判断它是否已经被装载过。我们也可以对此方式作点改变。假如,想在加载一个绑定前,简单地清除掉缓存,可以调用 ResourceBundle类的 clearCache 方法来实现。ResourceBundle.clearCache();
ResourceBundle myBundle = ResourceBundle.getBundle("com.sun.demo.intl.res.Warnings");甚至能为缓存设置一个“过期”数值来控制缓存的“生存周期”。在 Control 的子类里覆盖方法getTimeToLive ,这个方法返回以毫秒值代表的“生命周期”。缺省情况下,这个方法返回的是预定义的两个值中的一个,这两个值是:TTL_DONT_CACHE 和 TTL_NO_EXPIRATION_CONTROLControl 缺省情况时返回 TTL_NO_EXPIRATION_CONTROL,这个值表示:缓存永不过期。而 TTL_DONT_CACHE 表示:根本就不对绑定进行缓存。假如,想让“绑定”每过4个小时就要进行更新,而且不是重新启动程序的话,那么需要像如下代码那样来覆盖 getTimeToLive 方法:
public long getTimeToLive() {
return 4L*60*60*1000; // 14,400,000 milliseconds is four hours.
}Control 对象里有很多方法来为绑定的搜索和控制进行细致地设置。本文仅列举了其中的一些,其他的,如下所列的方法也可通过覆盖来实现定制:
* getCandidateLocales
* getFallbackLocale
* newBundle
* needsReload请参阅详细的文档中对这些方法的说明(http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.Control.html)
这种情况有解么?
public static final void clearCache() {
clearCache(getLoader());
}
public static final void clearCache(ClassLoader loader) {
if (loader == null) {
throw new NullPointerException();
}
Set<CacheKey> set = cacheList.keySet();
for (CacheKey key : set) {
if (key.getLoader() == loader) {
set.remove(key);
}
}
}