首先,从中获取
InputStream要加载的属性。这可以来自多个位置,包括一些最可能的位置:
- A
FileInputStream
,使用硬编码或通过系统属性指定的文件名创建。名称可以是相对的(相对于Java进程的当前工作目录)或绝对的。 - 资源文件(类路径上的文件),通过
getResourceAsStream
对Class
(相对于类文件)或ClassLoader
(相对于类路径的根)的调用获得。请注意,如果资源丢失,这些方法将返回null,而不是引发异常。 - 一
URL
,其中,像一个文件名,可以通过设置系统属性硬编码或指定。
然后创建一个新
Properties对象,并将其传递
InputStream给其
load()方法。无论有任何例外,请确保关闭流。
在类初始化程序中,
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); }}


