java获取资源文件_【java】获取解析资源文件的方法

关于资源文件的读取,有很多种方法,下面补充了多种方法

1.java.util.ResourceBundle

使用java自带的util包下的ResourceBundle类获取,使用方法最简单

//获取资源文件中键值对

ResourceBundle bundle = ResourceBundle.getBundle("资源文件的名字,不带后缀");

bundle.getString("键名");

注意点:①资源文件直接放在项目的src下,也就是你项目的classpath下,编译完放置的路径在classes下

6b9e5868e03c3fdcce6e6b85a41e2afa.png

b3d9565690c49288634d0e470915f791.png

②注意     ResourceBundle bundle = ResourceBundle.getBundle("quest");这里就填写你资源文件的名字,不用写后缀

③注意    maven管理的项目下,就将配置文件放置在resources文件夹下,编译后的位置就在classes文件夹下

c596462d87a038ced3d92df3865b4c95.png

----------------------------------------------------------------------------第二种方法-------------------------------------------------------------------------

2.第二种方法,java.util.Properties获取资源对象

不会因为上面的getString或者getObjec获取不存在的key的时候,会报错的情况

4bb8aaa33ba72a9f92b807c3297ce43f.png

f6e5fdd39500e79ff7a66aa4ce570b57.png

importjava.io.IOException;importjava.util.Properties;importorg.junit.Test;importorg.springframework.core.io.ClassPathResource;importorg.springframework.core.io.Resource;public classPropertiesRead {

@Testpublic voidtestF(){

Properties properties= newProperties();

Resource resource=new ClassPathResource("test_sys.properties");try{

properties.load(resource.getInputStream());

System.out.println(properties.get("1.4"));

}catch(IOException e) {

System.out.println("异常如下:"+e);

}

}

}

结果:

89b64f1e01869c66f904a1536bbffab1.png不会因为找不到key而报错。

-----------------------------------------------------------------------第三种方法----------------------------------------------------------------------------

3.使用Java自带方式获取文件,区别与第二种方法使用spring工具类获取文件路径、

首先,先看一下怎么能拿到本项目中的资源文件

2cd250b962460289baf844ea2be0a216.png      资源文件内容:

393011f6d65d8041db8d9830422326c6.png

@org.junit.Testpublic void test() throwsIOException{

System.out.println(this.getClass().getClassLoader().getResource(".").getPath());

}

6e2f85c89e70f3989b993e007f42aa34.png

可以看到 ,使用上面的方法,可以获取到如上的路径,

target是项目编译完之后的编译文件存放的地方,可以在上面的路径下看到咱们想要的资源文件。

0ab471bcc92543c4ec3780dba50025b1.png

可以看到,项目编译完后,编译文件存在的路径是下面

a53b51e8aa65f141382fdee23f8569c2.png分别对应

5f4da616b5573307162bc5ea2a4d7ee1.pngclasses对应main资源包,test-classes对应test资源包

也就是说,通过上面的方法,就可以获取到每一个模块的跟路径,

那这样就仅使用java自带的方法,获取到项目中的资源文件了。

代码如下:获取资源文件中存在的键

@org.junit.Testpublic void test() throwsIOException{

FileInputStream fileInputStream= new FileInputStream(this.getClass().getClassLoader().getResource(".").getPath()+"sys_product_price.properties");

Properties properties= newProperties();

properties.load(fileInputStream);

System.out.println(properties.get("1-90"));

}

d88eb6e9abc96c3ad6d754eb60c8ce97.png

代码如下:获取不存在的键

@org.junit.Testpublic void test() throwsIOException{

FileInputStream fileInputStream= new FileInputStream(this.getClass().getClassLoader().getResource(".").getPath()+"sys_product_price.properties");

Properties properties= newProperties();

properties.load(fileInputStream);

System.out.println(properties.get("不存在的键"));

}

4593276b9f6968694cba08e0504c69c1.png

---------------------------------------------------------------------------问题----------------------------------------------------------------------------------

【问题】

问题1:在解析资源文件的过程中,

java.util.MissingResourceException: Can't find bundle for base name quest, locale zh_CN

9264aab6413b6e994088d3f350fd8980.png

解决方法:

这是因为在本项目的目录下并没有找到本资源文件,把资源文件放到上面展示的位置即可。

-----------------------------------------------------------------------------分割----------------------------------------------------------------------

问题2:

报错如下:

java.util.MissingResourceException: Can't find resource for bundle java.util.PropertyResourceBundle, key 1.4

55eb626e15e9382b9ef801b57e8fea8b.png

9c87a09eecba2e359b3be08f1e05e037.png

5619d0d7c5382ad897884de19af32e57.png

@Testpublic voidtestF(){

ResourceBundle bundle= ResourceBundle.getBundle("test_sys");

System.out.println(bundle.getString("1.4"));

}

@Testpublic voidtestF(){

ResourceBundle bundle= ResourceBundle.getBundle("test_sys");

System.out.println(bundle.getObject("1.4").toString());

}

不论是getString(键名)还是getObject(键名),如果找不到键名,都不会返回Null,而是会报错。

问题原因:

找不到键名“1.4”.

acc065095d0ece4c94622d01c2906165.png

解决方法:

@Testpublic voidtestF(){

ResourceBundle bundle= ResourceBundle.getBundle("test_sys");try{

System.out.println(bundle.getString("1.4"));

}catch(MissingResourceException e) {

System.out.println("捕捉异常,自行处理,不至于程序报错");

}

}

或者,使用文章开头的 第二种Properties方式。

------------------------------------------------------------------分割--------------------------------------------------------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值