我有一个静态util类,它对敏感数据进行一些字符串操作。在使用此类之前,我需要使用我喜欢存储在.properties文件中的值(例如用户名/密码)初始化某些静态变量。
.properties
我不太熟悉.propertiesJava 中文件的加载方式,尤其是在 Spring DI 容器之外。任何人都可以帮助我/如何做到这一点?
谢谢!
另外: .properties文件的精确位置是未知的,但是它将在类路径上。有点像classpath:/my/folder/name/myproperties.propeties
classpath:/my/folder/name/myproperties.propeties
首先,从中获取InputStream要加载的属性。这可以来自多个位置,包括一些最可能的位置:
InputStream
FileInputStream
getResourceAsStream
Class
ClassLoader
URL
然后创建一个新Properties对象,并将其传递InputStream给其load()方法。无论有任何例外,请确保关闭流。
Properties
load()
在类初始化程序中,IOException必须处理类似检查的异常。可以引发未经检查的异常,这将阻止类的初始化。这样通常会完全阻止您的应用程序运行。在许多应用程序中,可能希望改用默认属性,或者回退到其他配置源,例如提示在交互式上下文中使用。
IOException
总共看起来可能像这样:
private static final String NAME = "my.properties"; private static final Properties config; static { Properties fallback = new Properties(); fallback.put("key", "default"); config = new Properties(fallback); URL res = MyClass.getResource(NAME); if (res == null) throw new UncheckedIOException(new FileNotFoundException(NAME)); URI uri; try { uri = res.toURI(); } catch (URISyntaxException ex) { throw new IllegalArgumentException(ex); } try (InputStream is = Files.newInputStream(Paths.get(uri))) { config.load(is); } catch (IOException ex) { throw new UncheckedIOException("Failed to load resource", ex); } }