`

Java中Properties类的简介

阅读更多
之前针对项目的配置文件,遇到xml我们直接就用现在的开源框架dom4j或者jdom去解析,但是现在遇到一个后缀为properties的文件,里面保存的都是一些键值对,想想,我们还能去用那两种方式去解析吗?如果可以,那表示小弟还没有接触到哪个层面,目前只会用其最常用的,针对xml文件的解析,但是碰见类似于下面的键值对,我们该如何去做?难道要一行行的读出来,然后去判断等号的位置,然后进行截取?我不能说你这种方法不好,但是如果有简单的办法,为什么不用呢?还要自己去写读取的逻辑呢?而且如果考虑到代码的复用性,你还不得不考虑性能问题,一般来说,Java提供的api也是经过千锤百炼的,除非你是是牛逼的开发人员,不然还是建议老老实实用java提供的api吧。

下面我们就看一种最简单的文件读取吧。

下面的文件内容保存在我本地的F:\Work\properties中。
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties;

public class UtilProperties 
{

	public static void main(String[] args) 
	{
		
		File file = new File("F:\\Work\\properties\\db.properties");
		
		FileInputStream fi = null;
		
		try 
		{
			fi = new FileInputStream(file);
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}
		
		Properties p = new Properties();
		
		try 
		{
			p.load(fi);
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		
		p.list(System.out);
		
	}
}

运行结果输出如下。(此方法一般用于调试)
-- listing properties --
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

下面这种方式的输出才是我们需要用到的,
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Properties;

public class UtilProperties 
{

	public static void main(String[] args) 
	{
		
		File file = new File("F:\\Work\\properties\\db.properties");
		
		FileInputStream fi = null;
		
		try 
		{
			fi = new FileInputStream(file);
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}
		
		Properties p = new Properties();
		
		try 
		{
			p.load(fi);
		} catch (IOException e) 
		{
			e.printStackTrace();
		}
		
		Enumeration e = p.propertyNames();
		
		while(e.hasMoreElements())
		{
			Object obj = e.nextElement();
			System.out.println(obj+"="+p.getProperty((String) obj));
		}
		
	}
}

结果如下:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

虽然你发现输出反而少了一行,但是你可以看下我们的输出代码的写法,如果我们不用去输出,而是把他set进入一个对象的属性中去,那我们岂不是能够通过此方法,获得文件的记录,然后入库或者都可以了,是不是很简单,但是你会发现,我们这样做仅仅不够,很多人就会问了,这个类就只有这一个作用吗?别着急,下面我们就开始进入另一个相对比较常见的方式,xml文件解析

xml文件这次我们保存在我们的项目路径下D:\Workspace\TESTFOROJ

文件的内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<entry key="jdbc.url">jdbc:oracle:thin:@127.0.0.1:1521:oracle</entry>
<entry key="jdbc.username">test</entry>
<entry key="jdbc.password">test</entry>
<entry key="jdbc.driverClassName">oracle.jdbc.driver.OracleDriver</entry>
</properties>


我们需要解析的代码就变成如下代码了:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class UtilProperties 
{

	public static void main(String[] args) 
	{

		File file = new File("D:\\Workspace\\TESTFOROJ\\db.xml");

		FileInputStream fi = null;

		try 
		{
			fi = new FileInputStream(file);
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}

		Properties p = new Properties();

		try 
		{
			p.loadFromXML(fi);
		} catch (InvalidPropertiesFormatException e1) 
		{
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		@SuppressWarnings("unchecked")
		Enumeration<Object> e = (Enumeration<Object>) p.propertyNames();

		while (e.hasMoreElements()) 
		{
			Object obj = e.nextElement();
			System.out.println(obj + "=" + p.getProperty((String) obj));
		}

	}
}
输出结果如下:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver

以上是举例我们如何进行xml文件的读取, 其实我们还可以做到xml文件的保存
我们还是以上个文件为例,代码如下
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.InvalidPropertiesFormatException;
import java.util.Properties;

public class UtilProperties 
{
	
	private static void getXML(Properties p,String fileName)
	{
		File file = new File(fileName);

		FileInputStream fi = null;

		try 
		{
			fi = new FileInputStream(file);
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		}

		try 
		{
			p.loadFromXML(fi);
		} catch (InvalidPropertiesFormatException e1) 
		{
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}

		@SuppressWarnings("unchecked")
		Enumeration<Object> e = (Enumeration<Object>) p.propertyNames();

		while (e.hasMoreElements()) 
		{
			Object obj = e.nextElement();
			System.out.println(obj + "=" + p.getProperty((String) obj));
		}
	}

	public static void main(String[] args) 
	{

		Properties p = new Properties();
		
		//读取文件
		getXML(p,"D:\\Workspace\\TESTFOROJ\\db.xml");
		//改变我们读进来的属性,然后输出到另一个xml文件中去
		
		p.setProperty("jdbc.username", "OOOOOOXXXXXXXX");
		
		PrintStream ps = null;
		String fileName = "D:\\Workspace\\TESTFOROJ\\db_bak.xml";
		
		try {
			ps = new PrintStream(new File(fileName));
		} catch (FileNotFoundException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		try {
			p.storeToXML(ps, "this is print xml,just for test");
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
		//看下改变之后的文件内容
		getXML(p,fileName);

	}
}

下面是我们的输出结果:
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=test
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver
jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521:oracle
jdbc.username=OOOOOOXXXXXXXX
jdbc.password=test
jdbc.driverClassName=oracle.jdbc.driver.OracleDriver


注意,此类还有很多我没有涉及到的,一些高级的属性,后续会慢慢研究,此文章只为备忘,如果有朋友看到了,有觉得不对的地方,请尽管提出来。注意,代码中有一些后续工作没有处理,比如流的关闭,我是没有做的,希望大家要注意哦。

以下是load方法的解释。
Open Declaration void java.util.Properties.load(InputStream inStream) throws IOException


Reads a property list (key and element pairs) from the input byte stream. The input stream is in a simple line-oriented format as specified in load(Reader) and is assumed to use the ISO 8859-1 character encoding; that is each byte is one Latin1 character. Characters not in Latin1, and certain special characters, are represented in keys and elements using Unicode escapes. 

The specified stream remains open after this method returns



分享到:
评论

相关推荐

    JAVA 解决Properties文件保存中文乱码

    在Java编程中,Properties文件是用于存储配置信息的文本文件,通常包含键值对,其中键和值可以是任意字符串。然而,当这些文件中包含中文字符时,如果不正确地处理编码,可能会出现中文乱码的问题。本文将深入探讨...

    java properties文件中文转化

    Java Properties文件是Java编程语言中用于存储配置信息的文本文件,通常以.properties为扩展名。这类文件的内容主要是键值对,广泛应用于各种配置场景,如应用程序的设置、国际化(i18n)文本等。然而,由于历史原因...

    利用Java的Properties 类读取配置文件信息

    Java提供了一个内置的`java.util.Properties`类,用于处理`.properties`文件,这种格式通常用来存储键值对,即键(key)和对应的值(value)。以下是如何利用`Properties`类读取和操作`.properties`文件的详细步骤。...

    java 改变Properties文件中的键值

    总结来说,Java中修改Properties文件的键值涉及到使用`Properties`类的`load()`, `setProperty()`, 和 `store()`方法。在实际应用中,需要考虑异常处理和资源管理,以确保程序的稳定性和效率。通过封装这些操作到...

    Java中Properties类的操作实例详解

    Java中Properties类的操作实例详解 Java中Properties类是Java.util包中的一个重要类,主要用于读取Java的配置文件。Properties类继承自Hashtable,提供了几个主要的方法,包括getProperty、load、setProperty、...

    java 读取properties文件代码

    总结,Java中读取Properties文件是通过`java.util.Properties`类来实现的,涉及的关键步骤包括加载文件、获取键值对以及处理可能的异常。这种机制在许多场景下都非常实用,如数据库连接配置、应用设置等。理解并熟练...

    java properties文件操作工具类,可追加修改

    此工具类只用于Java后端在操作Properties文件的时候写的工具类,方便properties文件的存取操作

    java对properties的操作工具类

    java对properties的操作工具类 属性文件

    java操作properties方法

    在Java编程中,操作配置文件,尤其是`.properties`文件,是一项常见的任务。`.properties`文件主要用于存储应用程序的配置信息,通常包含键值对,其中键是唯一的标识符,值是与该键相关联的数据。Java提供了`java....

    java实现properties文件读取

    首先,我们需要了解Properties类在Java中的作用。`java.util.Properties`是Java提供的一个类,它继承了`Hashtable`,主要用于处理属性列表(键/值对)。以下是如何创建和加载Properties文件的基本步骤: 1. **创建...

    java读写properties配置文件

    在Java开发中,`Properties`类被广泛用于处理各种类型的配置文件。这些文件通常包含了应用程序运行时所需的配置信息,如数据库连接信息、系统参数等。`Properties`类继承自`Hashtable`类,并通过键值对的形式存储...

    java修改Properties文件,让输出格式与输入格式保持不变

    在Java编程中,Properties类是处理配置文件的关键工具,它用于加载、存储键值对,这些键值对常被用于程序的配置。然而,当我们读取一个Properties文件并再次保存时,原始的格式可能会发生变化,比如注释丢失、行顺序...

    java读取properties六种方法

    在Java编程中,读取`properties`文件是常见的任务,用于存储配置信息或者系统设置。以下将详细讲解六种不同的方法来实现这一功能。 1. **使用Properties类** Java的标准库提供了`java.util.Properties`类,它是...

    Java读取含中文key的properties文件

    `java.util.Properties`是Java标准库中的一个类,它提供了一种加载和保存属性列表的方法,这些属性可以是字符串到字符串的映射。但是,由于默认的编码问题,我们需要指定正确的编码来解析含有非ASCII字符的键或值。...

    java对properties配置文件的读和写

    1.1.1 创建`Properties`对象:`Properties`类是Java提供的内置类,用于处理`properties`文件中的键值对。 ```java Properties properties = new Properties(); ``` 1.1.2 打开文件并创建`FileInputStream`:使用`...

    Java .properties中文资源批量转换工具和用法

    Java中的`.properties`文件是用于存储配置信息和国际化(i18n)资源的关键组件。这些文件通常包含键值对,其中键代表消息或文本标识,值是与该键关联的本地化字符串。在处理中文内容时,由于字符编码的问题,可能会...

    java解析Properties配置文件为对象Bean

    利用java的反射解析Properties文件转成对象 /** * 解析properties文件为对象 * @param * @param propPath * @param cls * @return * @throws InstantiationException * @throws ...

    Java Properties 解决中文乱码和顺序读写.docx

    Java Properties 类是Java标准库中用于处理配置文件的关键组件,主要负责存储和加载键值对数据,常用于管理应用程序的配置信息。配置文件通常以`.properties`为扩展名,采用文本格式,每行包含一个键值对,键和值...

    Java写的Properties读写类

    Java自带的Properties不好用,自己写了一个直接读写类,支持配置文件描述,支持对像值的描述,支持指定文件编码(默认UTF-8)

    java properties应用案例

    Java Properties是Java语言中用于处理配置文件的一个内置类,它主要负责存储键值对的数据,广泛应用于各种配置文件,如数据库连接配置、系统环境变量设置等。Properties类提供了读取和写入.properties文件的能力,...

Global site tag (gtag.js) - Google Analytics