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

1.java.util.ResourceBundle

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

//获取资源文件中键值对
ResourceBundle bundle = ResourceBundle.getBundle("资源文件的名字,不带后缀");
bundle.getString("键名");

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

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

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

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

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

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

import java.io.IOException;
import java.util.Properties; import org.junit.Test;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource; public class PropertiesRead { @Test
public void testF(){
Properties properties = new Properties();
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);
}
}
}

结果:

不会因为找不到key而报错。

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

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

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

      资源文件内容:

@org.junit.Test
public void test() throws IOException{
System.out.println(this.getClass().getClassLoader().getResource(".").getPath());
}

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

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

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

分别对应classes对应main资源包,test-classes对应test资源包

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

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

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

@org.junit.Test
public void test() throws IOException{
FileInputStream fileInputStream = new FileInputStream(this.getClass().getClassLoader().getResource(".").getPath()+"sys_product_price.properties");
Properties properties = new Properties();
properties.load(fileInputStream);
System.out.println(properties.get("1-90"));
}

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

@org.junit.Test
public void test() throws IOException{
FileInputStream fileInputStream = new FileInputStream(this.getClass().getClassLoader().getResource(".").getPath()+"sys_product_price.properties");
Properties properties = new Properties();
properties.load(fileInputStream);
System.out.println(properties.get("不存在的键"));
}

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

【问题】

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

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

解决方法:

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

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

问题2:

报错如下:

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

@Test
public void testF(){
ResourceBundle bundle = ResourceBundle.getBundle("test_sys");
System.out.println(bundle.getString("1.4"));
}
@Test
public void testF(){
ResourceBundle bundle = ResourceBundle.getBundle("test_sys");
System.out.println(bundle.getObject("1.4").toString());
}

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

问题原因:

  找不到键名“1.4”.

解决方法:

@Test
public void testF(){
ResourceBundle bundle = ResourceBundle.getBundle("test_sys");
try {
System.out.println(bundle.getString("1.4"));
} catch (MissingResourceException e) {
System.out.println("捕捉异常,自行处理,不至于程序报错");
}
}

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

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

【java】获取解析资源文件的方法的更多相关文章

  1. java中读取资源文件的方法

    展开全部 1.使用java.util.Properties类的load()方法 示例: //文件在项目下.不是在包下!! InputStream in = new BufferedInputStrea ...

  2. java读取项目资源文件的方法

    1.把资源文件放在项目的Resource文件夹下,并使其设置成为资源文件夹(通过idea或者eclise)2. Thread.currentThread().getContextClassLoader ...

  3. java 中获得 资源文件方法

    1 java 中获取资源文件的方法 项目目录如下 获取当前项目的目录路径 方法一:使用类名 MergeDocHandler.class.getClassLoader().getResource(&qu ...

  4. java后台获取国际化资源文件

    //current属性,由于此属性只做赋值操作,不做取值操作,因此没有get方法 private Locale current; public void setCurrent(Locale cur) ...

  5. Java加载资源文件的两种方法

    处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两 ...

  6. Java解析JSON文件的方法

    http://blog.sina.com.cn/s/blog_628cc2b70101dydc.html java读取文件的方法 http://www.cnblogs.com/lovebread/ar ...

  7. Spring源码学习-容器BeanFactory(一) BeanDefinition的创建-解析资源文件

    写在前面 从大四实习至今已一年有余,作为一个程序员,一直没有用心去记录自己工作中遇到的问题,甚是惭愧,打算从今日起开始养成写博客的习惯.作为一名java开发人员,Spring是永远绕不过的话题,它的设 ...

  8. java 获取classpath下文件多种方式

    java 获取classpath下文件多种方式 一:properties下配置 在resources下定义server.properties register.jks.path=classpath\: ...

  9. Android程序解析XML文件的方法及使用PULL解析XML案例

    一.一般解析XML文件的方法有SAX和DOM.PULL (1)DOM(JAXP Crimson解析器) DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准.DOM是以层次结构组织的节点或信 ...

随机推荐

  1. 知问前端——日历UI(二)

    datapicker外观选项 属性 默认值/类型 说明 disabled false/布尔值 禁用日历 numberOfMonths 1/数值 日历中同时显示的月份个数.默认为1,如果设置3就同时显示 ...

  2. [BZOJ1005]Prufer数列+排列组合

    一棵树的Prufer数列 每次在剩下的树中找到标号最小的叶子节点(对于无根树而言即是度数为1的节点),删去. 同时将其父节点(即与其相连的唯一点)加入Prufer数列当中. 一个Prufer数列所对应 ...

  3. 进一步认识golang中的并发

    如果你成天与编程为伍,那么并发这个名词对你而言一定特别耳熟.需要并发的场景太多了,例如一个聊天程序,如果你想让这个聊天程序能够同时接收信息和发送信息,就一定会用到并发,无论那是什么样的并发. 并发的意 ...

  4. Git-cheatsheet

  5. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  6. Linux makefile 教程 非常详细,且易懂【转】

    转自:   http://blog.csdn.net/liang13664759/article/details/1771246 最近在学习Linux下的C编程,买了一本叫<Linux环境下的C ...

  7. 【C++】继承时构造函数和析构函数

    1. 顺序 先调用基类的构造函数,再调用派生类构造函数.析构顺序相反. 2. 构造函数 派生类 不用初始化列表调用基类构造函数->调用基类的默认构造函数 派生类 使用初始化列表调用基类带参构造函 ...

  8. <context-param>与<init-param>的区别与作用(转自青春乐园)(

    <context-param>的作用:web.xml的配置中<context-param>配置作用1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件we ...

  9. HDU 2710 Max Factor(数论,素数筛法)

    #include<iostream> #include<stdio.h> #include<string.h> #include<cmath> usin ...

  10. Codeforces 361D Levko and Array(二分)(DP)

    Levko and Array time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...