`

对properties和xml文件的加载操作

阅读更多

 Properties 类已不是新东西了,它在 Java 编程的早期就有了,并且几乎没有什么变化。J2SE 的 Tiger 版本增强了这个类,不仅可以用它在单独一行中指定用等号分隔的多个键-值对,还可以用XML 文件装载和保存这些键-值对。


      J2SE 1.5 以前的版本要求直接使用 XML 解析器来装载配置文件并存储设置。虽然这并非是一件困难的事情,并且解析器是平台的标准部分,但是额外的工作总是有点让人烦。最近更新的 java.util.Properties 类现在提供了一种为程序装载和存储设置的更容易的方法: loadFromXML(InputStream is) 和 storeToXML(OutputStream os, String comment) 方法。

Properties 基本知识
如果不熟悉 java.util.Properties 类,那么现在告诉您它是用来在一个文件中存储键-值对的,其中键和值是用等号分隔的,如清单 1 所示。

清单 1. 一组属性示例

foo=bar
fu=baz




将清单 1 装载到 Properties 对象中后,您就可以找到两个键( foo 和 fu )和两个值( foo 的 bar 和 fu 的 baz )了。这个类支持带 \u 的嵌入 Unicode 字符串,但是这里重要的是每一项内容都当作 String 。

清单 2 显示了如何装载属性文件并列出它当前的一组键和值。只需传递这个文件的 InputStream 给 load() 方法,就会将每一个键-值对添加到 Properties 实例中。然后用 list() 列出所有属性或者用 getProperty() 获取单独的属性。

清单 2. 装载属性

import java.util.*;
import java.io.*;

public class LoadSample {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    FileInputStream fis =
      new FileInputStream("sample.properties");
    prop.load(fis);
    prop.list(System.out);
    System.out.println("\nThe foo property: " +
        prop.getProperty("foo"));
  }
}




运行 LoadSample 程序生成如清单 3 所示的输出。注意 list() 方法的输出中键-值对的顺序与它们在输入文件中的顺序不一样。 Properties 类在一个散列表(hashtable,事实上是一个 Hashtable 子类)中储存一组键-值对,所以不能保证顺序。

清单 3. LoadSample 的输出

-- listing properties --
fu=baz
foo=bar

The foo property: bar




XML 属性文件
这里没有什么新内容。 Properties 类总是这样工作的。不过,新的地方是从一个 XML 文件中装载一组属性。它的 DTD 如清单 4 所示。

清单 4. 属性 DTD

<?xml version="1.0" encoding="UTF-8"?>
<!-- DTD for properties -->
<!ELEMENT properties ( comment?, entry* ) >
<!ATTLIST properties version CDATA #FIXED "1.0">
<!ELEMENT comment (#PCDATA) >
<!ELEMENT entry (#PCDATA) >
<!ATTLIST entry key CDATA #REQUIRED>




如果不想细读 XML DTD,那么可以告诉您它其实就是说在外围 <properties> 标签中包装的是一个 <comment> 标签,后面是任意数量的 <entry> 标签。对每一个 <entry> 标签,有一个键属性,输入的内容就是它的值。清单 5 显示了 清单 1中的属性文件的 XML 版本是什么样子的。

清单 5. XML 版本的属性文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Hi</comment>
<entry key="foo">bar</entry>
<entry key="fu">baz</entry>
</properties>




如果清单 6 所示,读取 XML 版本的 Properties 文件与读取老格式的文件没什么不同。

清单 6. 读取 XML Properties 文件

import java.util.*;
import java.io.*;

public class LoadSampleXML {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    FileInputStream fis =
      new FileInputStream("sampleprops.xml");
    prop.loadFromXML(fis);
    prop.list(System.out);
    System.out.println("\nThe foo property: " +
        prop.getProperty("foo"));
  }
}




关于资源绑定的说明
虽然 java.util.Properties 类现在除了支持键-值对,还支持属性文件作为 XML 文件,不幸的是,没有内置的选项可以将 ResourceBundle 作为一个 XML 文件处理。是的, PropertyResourceBundle 不使用 Properties 对象来装载绑定,不过装载方法的使用是硬编码到类中的,而不使用较新的 loadFromXML() 方法。


运行清单 6 中的程序产生与原来的程序相同的输出,如 清单 2所示。

保存 XML 属性
新的 Properties 还有一个功能是将属性存储到 XML 格式的文件中。虽然 store() 方法仍然会创建一个类似 清单 1 所示的文件,但是现在可以用新的 storeToXML() 方法创建如 清单 5 所示的文件。只要传递一个 OutputStream 和一个用于注释的 String 就可以了。清单 7 展示了新的 storeToXML() 方法。

清单 7. 将 Properties 存储为 XML 文件

import java.util.*;
import java.io.*;

public class StoreXML {
  public static void main(String args[]) throws Exception {
    Properties prop = new Properties();
    prop.setProperty("one-two", "buckle my shoe");
    prop.setProperty("three-four", "shut the door");
    prop.setProperty("five-six", "pick up sticks");
    prop.setProperty("seven-eight", "lay them straight");
    prop.setProperty("nine-ten", "a big, fat hen");
    FileOutputStream fos =
      new FileOutputStream("rhyme.xml");
    prop.storeToXML(fos, "Rhyme");
    fos.close();
  }
}




运行清单 7 中的程序产生的输出如清单 8 所示。

清单 8. 存储的 XML 文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>Rhyme</comment>
<entry key="seven-eight">lay them straight</entry>
<entry key="five-six">pick up sticks</entry>
<entry key="nine-ten">a big, fat hen</entry>
<entry key="three-four">shut the door</entry>
<entry key="one-two">buckle my shoe</entry>
</properties>




                                                               结束语


    使用 XML 文件还是使用老式的 a=b 类型的文件完全取决于您自己。老式文件从内存的角度看肯定是轻量级的。不过,由于 XML 的普遍使用,人们会期望 XML 格式流行起来,因为它已经被广泛使用了,只不过没有用到 Properties 对象。选择完全在您。分析软件包 private XMLUtils 类的源代码以获得关于所使用的 XML 解析的更多信息。

 

 

 

PTest.java
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
 * 实现properties文件的读取
 * @author bbflyerwww
 * @date 2006-08-02
 */
public class PTest {
    public static void main(String[] args) {
        try {
            long start = System.currentTimeMillis();
            InputStream is = new FileInputStream("conf.properties");
            Properties p = new Properties();
            p.load(is);
            is.close();
            System.out.println("SIZE : " + p.size());
            System.out.println("homepage : " + p.getProperty("homepage"));
            System.out.println("author : " + p.getProperty("author"));
            System.out.println("school : " + p.getProperty("school"));
            System.out.println("date : " + p.getProperty("date"));
            long end = System.currentTimeMillis(); 
            System.out.println("Cost : " + (end - start));
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }
}

分享到:
评论

相关推荐

    Configuration对properties、xml配置文件的【增删改查】及动态加载

    Apache Commons Configuration库提供了一个强大的工具集,用于处理各种类型的配置文件,包括properties和XML格式。这个库使得在运行时对配置进行【增删改查】操作变得简单,同时支持动态加载,从而实现配置的实时...

    Properties和xml读写操作

    根据给定文件的信息,我们可以总结出关于 Java 中 Properties 和 XML 的读写操作的相关知识点。 ### 一、Properties 文件的读写操作 #### 1. 读取 Properties 文件 在 Java 中,`Properties` 类用于处理属性文件...

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    通过这个配置,Spring可以管理MyBatis的SqlSession,实现数据库操作的事务控制,并且能够自动扫描和加载Mapper接口,使得SQL查询可以通过注解或者XML文件进行定义。 3. **web.xml**: 这是Web应用的部署描述符,定义...

    IDEA WEB项目启动不加载application.properties配置文件.docx

    "IDEA WEB项目启动不加载application.properties配置文件" 在本篇文章中,我们将讨论IDEA WEB...这些方法包括检查pom.xml文件中的依赖项,清理IDEA的缓存和重新启动项目。我们希望这些方法能够帮助您解决这个问题。

    c#操作properties,读写配置文件

    这些配置信息通常存储在配置文件中,便于程序运行时动态加载和修改。C#提供了一种简单有效的方法来操作配置文件中的属性(Properties),即通过`System.Configuration`命名空间下的`ConfigurationManager`类以及`...

    javatxt+Properties+xml文件读写

    这里主要关注的是对`.txt`、`.properties`和`.xml`这三种类型的文件进行操作。`.txt`文件是最常见的文本文件,`.properties`文件用于存储配置信息,而`.xml`文件则是一种结构化的数据存储格式,常用于数据交换和配置...

    JAVA高手解析XML配置文件的读取操作.pdf

    DOM 解析器将整个 XML 文件加载到内存中,然后进行解析,而 SAX 解析器则是一行一行地读取 XML 文件进行分析。SAX 解析器更适合大文件的解析,而 DOM 解析器则更适合小文件的解析。 在本文中,我们使用 SAX 解析器...

    整合activiti.cfg.xml文件到资源文件

    创建一个名为`ActivitiConfig.java`的类,用以加载和配置Activiti引擎。例如: ```java @Configuration public class ActivitiConfig { @Value("${activiti.db.url}") private String dbUrl; // 其他属性注入 ...

    加载properties配置文件的几种方法

    本文将深入探讨在SSM框架下加载properties配置文件的几种常见方法。 1. **使用Spring的PropertyPlaceholderConfigurer** Spring提供了`PropertyPlaceholderConfigurer`类,可以方便地从.properties文件中读取属性...

    java读取配置文件xml ,properties,txt

    DOM解析器将整个XML文档加载到内存中,形成一个树形结构,方便遍历和操作。以下是一个简单的DOM解析XML文件的示例: ```java import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers....

    IntelliJ IDEA修改了mybatis mapper xml后不用重启tomcat,自动热发布 热更新 热部署.zip

    为了解决这个问题,可以尝试设置IDEA对XML文件的监听更敏感,或者在编辑完XML文件后手动执行构建操作(如Build -&gt; Rebuild Project)来强制IDEA检查所有文件的改动。 需要注意的是,XML文件的热加载通常只对标签内...

    Spring3.0 配置文件中加载Properties文件的小例子

    本篇将详细讲解如何在Spring 3.0的配置文件中加载Properties文件,以便在运行时动态获取和使用这些配置。 首先,我们需要一个Properties文件,例如`application.properties`,它通常放在项目的类路径根目录下。这个...

    XML和属性文件读取和写入

    DOM将整个XML文档加载到内存中,形成一个树形结构,适合小型XML文件。SAX是一种事件驱动的解析器,逐行读取XML,适用于大文件。StaX是基于流的解析,介于DOM和SAX之间,提供更好的性能和灵活性。 ```java import ...

    JS编辑器(源代码,能打开*.js,*.xml,*.properties文件)

    4. **显示文件内容**:这一标签表明编辑器能够快速加载和显示指定类型的文件内容,无需离开编辑器环境。这有助于提升开发者的效率,他们可以在一个统一的平台上处理多种类型的文件。 5. **用户界面与交互**:一个...

    java操作properties方法

    3. **读取XML文件**:`Properties`类不仅支持`.properties`文件,还支持XML格式的配置文件。使用`loadFromXML()`和`storeToXML()`方法,可以实现XML文件的读写。 4. **读写其他格式文件**:尽管不是直接支持,但只要...

    log4j需要的jar以及properties文件

    总的来说,Log4j是一个强大且灵活的日志工具,通过`log4j-1.2.9.jar`和`log4j.properties`这两个文件,我们可以轻松地在Java项目中实现定制化的日志记录,从而提升开发效率和问题排查能力。虽然Log4j 1.x已经较为...

    SSM 读取properties文件

    这是一个Spring的bean定义类,它允许我们从properties文件中加载和解析属性值,然后将这些值注入到其他bean的属性中。首先,我们需要创建一个properties文件,例如`application.properties`,并放入项目的类路径下...

    解析properties文件demo

    在Java中,我们可以使用`java.util.Properties`类来加载和处理`properties`文件。首先,需要创建一个`Properties`对象,然后使用`load()`方法从输入流中加载文件内容。以下是一个简单的例子: ```java ...

    springboot+mybatis(mybatis dao与xml文件自动生成)

    现在,当项目启动时,MBG会根据`generatorConfig.xml`文件中的配置动态生成DAO接口和XML文件。这样,每次数据库表结构发生变化时,只需要更新配置文件,无需手动修改代码,大大提高了开发效率。 总结起来,Spring ...

Global site tag (gtag.js) - Google Analytics