java解析cfg.properties属性文件

       properties是一种属性文件,这种文件以key=value格局存储内容。Java中可以利用java.util.Properties类来读取这个文件,按照左边的key获取值,String value=p.getProperty(key);

       多种解析属性文件的体例中java.util.Properties解析文件的体例是同一的,都是经由过程load加载InputStream 对象。本家儿如果获取InputStream 对象的体例分歧,现实利用中我们不一定能精确获取properties属性文件的绝对路径。

      属性文件在eclipse和IDEA没有安装插件的环境下展示时会将中文转为Unicode编码,eclipse选中内容F2会显示具体的中文内容(如下图)。

工具/原料

  • 电脑
  • eclipse或者intellij IDEA

第一步调:properties属性文件解析体例

  1. 1

    第一种:本家儿如果经由过程class.getClassLoader().getResourceAsStream

    1、是实现获取在classpath路径下的资本文件的输入流

    为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资本文件移至WEB-INF/classes,classPath目次其实就是这个classes目次。这个目次下放的一般是web项目运行时的class文件、资本文件(xml,properties...);

    2、本家儿要代码:

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

    public class PropertiesUtils {

    /**

    * 按照key获取cfg.properties的值

    * @param key

    * @return

    */

    public static String getCfgPropertiesValue(String key) {

    Properties pro = new Properties();

    InputStream is = null;

    try {

    is = PropertiesUtils.class.getClassLoader().getResourceAsStream(

    "CodeMapping.properties");

    System.out.println();

    // 读取属性文件

    pro.load(is);

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (is != null) {

    is.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return pro.getProperty(key);

    }

    }

    3、main方式测试成果

    public class Test5 {

    public static void main(String[] args) {

    System.out.println("name:"

    + PropertiesUtils.getCfgPropertiesValue("name"));

    }

    }

  2. 2

    第二种:经由过程class.getResourceAsStream(String name)获取。

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

    public class Test5 {

    public static void main(String[] args) {

    System.out.println("name:" + getCfgPropertiesValue("name"));

    }

    /**

    * 按照key获取CodeMapping.properties的值

    * @param key

    * @return

    */

    public static String getCfgPropertiesValue(String key) {

    Properties pro = new Properties();

    InputStream is = null;

    try {

    is = Test5.class

    .getResourceAsStream("/CodeMapping.properties");

    System.out.println();

    // 读取属性文件

    pro.load(is);

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    if (is != null) {

    is.close();

    }

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return pro.getProperty(key);

    }

    }

  3. 3

    第三种:利用绝对路径解析。

    1、这种利用绝对路径的体例需要你可以或许精确供给位置

    2具体代码如下所示:

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStream;

    import java.util.Properties;

    public class Test5 {

    public static void main(String[] args) {

    System.out

    .println("name:"

    + getPropertiesValue(

    "D:/Workspaces/MyEclipse 10/servlet/src/CodeMapping.properties",

    "name"));

    }

    public static String getPropertiesValue(String filePath, String key) {

    Properties pro = new Properties();

    InputStream in = null;

    try {

    // 读取属性文件

    in = new FileInputStream(filePath);

    pro.load(in);

    } catch (IOException e) {

    e.printStackTrace();

    } finally {

    try {

    in.close();

    } catch (IOException e) {

    e.printStackTrace();

    }

    }

    return pro.getProperty(key);

    }

    }

第二步调:常识总结

  1. 1

    第一步:javaweb项目打包总结。

    1、通俗javaweb项目中的编译会将内容编译在WEB-INF\classes

    1、springboot项目当地开辟会将src/main/java和resources目次下的内容编译到target\classes下。打当作jar包之后:excelimport-0.0.1-SNAPSHOT.jar。目次为:excelimport-0.0.1-SNAPSHOT.jar\BOOT-INF\classes

  2. 2

    第二步:class.getClassLoader().getResourceAsStream(file)和class.getResourceAsStream(file)比力。

    1、都是实现获取在classpath路径下的资本文件的输入流。

    2、为什么是classpath而不是src,因为当web项目运行时,IDE编译器会把src下的一些资本文件移至WEB-INF/classes,classPath目次其实就是这个classes目次。这个目次下放的一般是web项目运行时的class文件、资本文件(xml,properties...);

    3、class.getClassLoader().getResourceAsStream(file)半斤八两于直接在根目次classes查找文件和Thread.currentThread().getContextClassLoader().getResourceAsStream一样,文件不在根目次classes下无法读取。

    InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("CodeMapping.properties");

    4、class.getResourceAsStream(file)定位相对于文件夹classes获取下一级内容需要加“/”到具体目次

    Test5.class.getResourceAsStream("/CodeMapping.properties");

注重事项

  • 解析properties属性文件不需要添加依靠包利用jdk自带的类就可以解决
  • 发表于 2019-05-08 20:02
  • 阅读 ( 147 )
  • 分类:其他类型

相关问题

0 条评论

请先 登录 后评论