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

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

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方式。

 

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

时间: 2024-08-03 04:08:51

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

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

处理配置文件对于Java程序员来说再常见不过了,不管是Servlet,Spring,抑或是Structs,都需要与配置文件打交道.Java将配置文件当作一种资源(resource)来处理,并且提供了两个类来读取这些资源,一个是Class类,另一个是ClassLoader类.     当我们自己的程序需要处理配置文件时(比如xml文件或properties文件),通常会遇到两个问题:   (1)我的配置文件应该放在哪里? (2)怎么我的配置文件找不到了?     在了解了Java加载资源文件的机制

Android编程解析XML文件的方法详解【基于XmlPullParser】

本文实例讲述了Android编程解析XML文件的方法.分享给大家供大家参考,具体如下: 前言 在学习Android的Framework层源码时,Android大量的使用XmlPullParser来解析xml文件的源码.因此,这里也顺道介绍一下XmlPullParser的使用. XML XML(eXtensible Markup Language)中文名为可扩展标记语言.标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等. 用途 XML设计用了传送及携带数据信息,

Android开发之DOM解析xml文件的方法_Android

本文实例讲述了Android中DOM解析xml文件的方法.分享给大家供大家参考,具体如下: 一.在assets文件中写xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明</name> <age>30</age> </person> <pe

Android开发之DOM解析xml文件的方法

本文实例讲述了Android中DOM解析xml文件的方法.分享给大家供大家参考,具体如下: 一.在assets文件中写xml文件 <?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>李明</name> <age>30</age> </person> <pe

java 解析xml文件-在JAVA中解析XML文件时遇上难题,向各位大虾求助。

问题描述 在JAVA中解析XML文件时遇上难题,向各位大虾求助. 在服务器进程中编写登录时出现以下错误提示: Exception in thread "Thread-0" java.lang.ClassCastException: com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl cannot be cast to javax.swing.text.Document at server.ServerThread.Lo

jQuery+ajax读取并解析XML文件的方法_jquery

本文实例讲述了jQuery+ajax读取并解析XML文件的方法.分享给大家供大家参考,具体如下: ajax.xml: <?xml version="1.0" encoding="UTF-8"?> <stulist> <student email="1@1.com"> <name>zhangsan</name> <id>1</id> </student>

java获取昨天日期字符串的方法_java

本文实例讲述了java获取昨天日期字符串的方法.分享给大家供大家参考,具体如下: import java.text.SimpleDateFormat; import java.util.Date; public class Test { /** * 获取昨天的日期字符串 * * @param nowDate * 当前日期的字符串 * @return */ public static String getLastDayInfo(String nowDate) { String yesterday

Java创建ZIP压缩文件的方法_java

本文实例讲述了Java创建ZIP压缩文件的方法.分享给大家供大家参考.具体如下: 这里注意:建议使用org.apache.tools.zip.*包下相关类,否则可能会出现中文乱码问题. /** * 压缩文件夹 * @param sourceDIR 文件夹名称(包含路径) * @param targetZipFile 生成zip文件名 * @author liuxiangwei */ public static void zipDIR(String sourceDIR, String target

在.NET中读取嵌入和使用资源文件的方法_C#教程

Dotnet中嵌入资源(位图.图标或光标等)有两种方式,一是直接把资源文件加入到项目,作为嵌入资源,在代码中通过Assembly的GetManifestResourceStream方法获取资源的Stream.另一种方法是在项目中加入. resx资源文件,在资源文件中添加资源,由ResourceManager类统一管理其中的资源. 下面分别详述这两种方法 一.使用GetManifestResourceStream读取嵌入资源 1.加入资源文件 直接把要嵌入到程序集的资源文件加入到项目中,可以加在项