`
alex09
  • 浏览: 974927 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用JAVA读写Properties属性文件

阅读更多
Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件。它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数据,没有必要使用数据库文件来保存,而使用一般的文本文件来保存,如果是通过File直接保存的话,可能在存储和读取上都不是很方便,但如果保存为Properties文件就不一样了,属性文件都有键值对应的,在JAVA的包中,有提供专门的操作属性文件的类。这个类就是 java.uitl.Properties类,由于Properties类是一个集合类,所以,Properties会将属性以集合的方式读写。

注意:下面的代码中对于抛出的异常都未采取捕获的方式,自己在编写程序的时候一定要注意捕获异常,推荐将捕获的异常处理掉。

Properties类继承字Hashtable类,采用键值对应的存储方式,在使用Properties类管理属性文件时有什么方便的呢?Properties类有专门的读写方法来读写Properties属性文件,不用担心读写的格式问题,只要为Properties类提供一个读写流即可。Properties用于读写属性文件的方法分别是:
  
//读取属性文件流的方法 
   public void load(InputStream inStream) throws IOException {} 
   //写属性文件流的方法 
   public void store(OutputStream out, String comments) throws IOException {} 

首先,我们来看看如何从一个属性文件中读取属性。

假定我们已经新建了一个属性文件,名为prop.properties,内容如下:

  
sitename=abcjava 
   siteurl=www.abcjava.com 


我们要做的第一步就是要将文件读取到Properties类对象中,由于load有一个参数是InputStream,所以我们可以用 InputStream的子类FileInputStream将属性文件读取到Properties对象中,知道prop.properties的路径,我们就用FileInputStream(String name)构造函数:

  
Properties prop = new Properties();//属性集合对象 
   FileInputStream fis = new FileInputStream("prop.properties");//属性文件流 
   prop.load(fis);//将属性文件流装载到Properties对象中 




接下来我们将做的事情就是如果读取一个属性,因为属性文件中的每一行都是一个键值对应,所以每一行都代表了一个属性对象,每一行都将以键和值的关系存储到Properties中,Properties类提供了getProperty(String key)方法用来通过键名读取键值,当key在属性集合中找不到时又想为key在程序中赋予一个值时可以使用public String getProperty(String key, String defaultValue)方法,这个方法的意思就是用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量:

  
//获取属性值,sitename已在文件中定义 
   System.out.println("获取属性值:sitename=" + prop.getProperty("sitename")); 
   //获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件 
   System.out.println("获取属性值:country=" + prop.getProperty("country", "中国")); 




在知道怎么读取属性文件之后我们还有一个很重要的事情就是要修改和添加新的属性到属性文件,这里就是使用public void store(OutputStream out, String comments)方法,这个方法是将属性集合写到一个OutputStream流中,同InputStream流一样,这里同样是使用其子类 FileOutputStream(String name),这里就不多说了。

在保存属性集合到文件之前,我们还有一件事情就是如何修改和添加新的属性到属性集合,这里使用了一个方法就是setProperty(String key, String value),这个方法就是当属性集合中存在指定的key时,就修改这个key的值,如果不存在,就新建一个key,同样是通过键值关系保存的,但值得注意的是,Properties类继承自Hashtable,所以也可以用Hashtable的put和putAll方法保存,但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。那好,下面我们就来看看修改、添加和保存属性的程序:

//修改sitename的属性值
prop.setProperty("sitename", "Boxcode");
//添加一个新的属性studio
prop.setProperty("studio", "Boxcode Studio");
//文件输出流
FileOutputStream fos = new FileOutputStream("prop.properties");
//将Properties集合保存到流中
prop.store(fos, "Copyright (c) Boxcode Studio");
fos.close();//关闭流



接下就是整个程序的源代码:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;

public class PropertyEditor {
	public static void main(String[] args) throws Exception {
		Properties prop = new Properties();// 属性集合对象
		FileInputStream fis = new FileInputStream("prop.properties");// 属性文件输入流
		prop.load(fis);// 将属性文件流装载到Properties对象中
		fis.close();// 关闭流

		// 获取属性值,sitename已在文件中定义
		System.out.println("获取属性值:sitename=" + prop.getProperty("sitename"));
		// 获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件
		System.out.println("获取属性值:country=" + prop.getProperty("country", "中国"));

		// 修改sitename的属性值
		prop.setProperty("sitename", "Boxcode");
		// 添加一个新的属性studio
		prop.setProperty("studio", "Boxcode Studio");
		// 文件输出流
		FileOutputStream fos = new FileOutputStream("prop.properties");
		// 将Properties集合保存到流中
		prop.store(fos, "Copyright (c) Boxcode Studio");
		fos.close();// 关闭流
	}
}




在我们知道如何读写一个属性文件之后,我们仍然还有很多需要注意的问题,因为load和store方法都是按照ISO-8859-1的编码方式读写属性流文件的,而ILatin1 的字符和某些特殊字符,而对于非Latin1 的字符和某些特殊字符,则要使用与字符和字符串字面值所用的类似转义序列,以值和元素的形式来表示它们。所以当我们在处理中文时,不可以在直接修改属性文件时,将中文的值赋予给属性,而是要在JAVA程序中通过setProperty方法给属性赋予中文的值,因为这样store会将中文转换成 unicode码,在读取时系统会将读取到的unicode码按系统的编码打印出来,对于中文系统,通常是GBK码,这样中文才能够正常显示。
分享到:
评论
3 楼 tengmeiting 2011-07-26  
 
2 楼 cui_com 2011-07-24  
借用,已写明出处
1 楼 szcxz 2009-12-31  
这样修改会改变原来文件数据的顺序,并把原文件的注释也去掉了。。有没有方法能保留原文件的结构,只修改需修改的部分呢?

相关推荐

    java读写properties配置文件

    #### 三、读取Properties配置文件 1. **读取单个键值** 在读取配置文件时,我们首先需要创建一个`Properties`对象,并使用`load`方法加载文件。接着可以通过`getProperty`方法获取指定键对应的值。 ```java ...

    java读取properties属性文件

    在Java编程中,读取properties属性文件是一项常见的任务,它主要用于存储配置信息,如数据库连接字符串、系统参数等。Properties文件通常以键值对的形式组织,键和值之间用等号(=)或冒号(:)分隔。这篇博客()...

    Python实现读取Properties配置文件的方法

    在Python编程中,有时我们需要处理Java开发中常用的`.properties`配置文件。虽然Python标准库并未直接提供处理此类文件...通过这种方式,你可以灵活地读取和使用Java风格的配置文件,让Python程序更加健壮和适应性强。

    java读取属性文件

    总之,Java中读取属性文件是通过`Properties`类实现的,结合日志记录可以增强程序的健壮性和可维护性。在处理配置文件时,一定要考虑到异常处理和日志记录,这有助于提高软件的质量和用户体验。

    Java读取properties文件的三种方式

    总结,Java中读取properties文件的方法包括使用Properties类加载文件、通过ClassLoader获取类路径下的文件以及利用try-with-resources语句进行资源管理。根据具体的应用场景,选择合适的方法可以更高效地处理配置...

    java实现properties文件读取

    使用`InputStream`来读取Properties文件,然后调用`load()`方法加载文件内容。这通常在程序启动时进行。 ```java try { InputStream input = new FileInputStream("config.properties"); prop.load(input); } ...

    JAVA读取properties文件的值

    本篇文章将详细探讨如何在Java中读取`properties`文件的值。 ### 1. `java.util.Properties` 类 Java提供了一个内置类 `java.util.Properties`,专门用于处理`.properties`文件。这个类继承了`HashTable`,并提供...

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

    通过以上步骤,你可以使用Java的`Properties`类高效地读取、修改和保存配置文件,为你的应用程序提供灵活的配置管理。在实际项目中,你可能会将其封装到一个单独的类,如示例代码中的`PropertiesReader`,以提供更...

    (转)java读取properties文件

    在Java编程中,读取`properties`文件是一个常见的任务,这些文件通常用于存储应用程序的配置信息,如数据库连接字符串、系统参数等。本篇将详细讲解如何在Java中读取`properties`文件,并通过提供的`...

    java完美读取properties文件

    本篇文章将详细讲解如何在Java中“完美”地读取`properties`文件。 首先,我们需要了解`properties`文件的基本结构。它是一个文本文件,其中键值对以`key=value`的形式存储,每一行代表一个键值对,注释以`#`或`!`...

    java 改变Properties文件中的键值

    在Java代码中,首先需要导入`java.util.Properties`和`java.io.*`等相关的类库,以便进行读写Properties文件的操作。 2. **加载Properties文件** 使用`Properties`类的`load()`方法加载Properties文件。这个方法...

    java读取properties文件

    如果文件使用UTF-8或其他编码,我们需要使用`loadFromXML()`方法或自定义`BufferedReader`来处理编码问题。例如: ```java InputStreamReader reader = new InputStreamReader(new FileInputStream("config....

    java properties文件中文转化

    默认情况下,Java Properties类在读取和写入文件时使用ISO-8859-1编码,这是一种西欧字符集,不包含中文字符。当我们在properties文件中直接使用中文时,Java在读取时可能会出现乱码。为了解决这个问题,我们可以...

    java读取.properties配置文件的几种方法

    在Java编程中,读取`.properties`配置文件是常见的任务,这些文件通常用于存储应用程序的配置参数、系统设置等信息。下面将详细介绍几种在Java中读取`.properties`配置文件的方法。 1. 使用`java.util.Properties`...

    java操作properties属性文件jp.gr.java_conf.ussiy.app.propedit_5.3.3.jar,有例子

    Java操作Properties属性文件是Java开发中的常见任务,主要用于配置应用的参数或存储系统设置。`jp.gr.java_conf.ussiy.app.propedit_5.3.3.jar` 是一个专门用于编辑和管理Properties文件的工具,这使得开发者可以...

    Java源码读写Properties文件.rar

    这个压缩包“Java源码读写Properties文件.rar”包含了一份关于如何使用Java来读取和写入Properties文件的源代码示例。下面我们将详细探讨这个主题。 首先,Properties类是Java的标准库类,位于`java.util`包下,它...

    java读取properties文件,连接数据库

    本文将详细介绍如何使用Java读取`.properties`文件并利用这些信息连接到数据库。 首先,我们需要理解`.properties`文件的结构。这是一种简单的键值对格式,例如: ``` database.url=jdbc:mysql://localhost:3306/...

    用JAVA轻松操作properties文件

    读取properties文件 ```java public static String readValue(String filePath, String key) { Properties props = new Properties(); try { InputStream in = new BufferedInputStream(new FileInputStream...

Global site tag (gtag.js) - Google Analytics