java静态初始化模块_在静态初始化程序块中加载Java属性

小编典典

首先,从中获取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); }

}

2020-12-03

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值