`
jianrc
  • 浏览: 25802 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

改进java.util.Properties类,让输出格式与输入格式保持不变.

    博客分类:
  • Java
阅读更多

如果要对一个属性设置文件.properties文件进行操作,我们当然想到用java.util.Properties类.对于只进行属性读取,这个类已经足够好了,但需要在Properties实例改变之后调用.store()或者.save()需要重新输出的时候,这个类就只会简单的把所有的属性简单的输出,整个文件格式和属性的顺序都改变了,原来的注释也消失了.

附件中是一个改进过的properites文件读写类,在java.util.Properties的基础上进行改进,在读取properties文件的时候把注释和顺序格式都记录下来,操作时候也把添加顺序记录了,所以很好的解决了java.util.Properties类在输出的不足,同时它提供addComment()方法,可以添加注释,这样,经过处理的properties的可读性就能继续保持下来了.

看下面的示范代码:

       FileInputStream input = new FileInputStream("e:/input.properties");

       SafeProperties safeProp = new SafeProperties();

       safeProp.load(input);

       input.close();

       safeProp.addComment("New Comment");

       safeProp.put("New-Key", "New====Value");

       FileOutputStream output = new FileOutputStream("e:/output.properties");

       safeProp.store(output, null);

       output.close();

 

分享到:
评论
7 楼 tomchen611 2008-12-23  
请问下要去掉转义符该咋办啊
6 楼 jianrc 2008-12-15  
wakinfan 写道

博主,你的这个类真是不错,可是现在有点问题呀,当有配置文件中是分段时,就是说不同的段中有相同的关键字时问题就来了,这样程序只保存一个,不知道应该怎么改。博主能不能改改呀。


同样的关键字?property文件里面key是唯一的,实际不唯一也只会有一个生效。
5 楼 wakinfan 2008-11-28  
博主,你的这个类真是不错,可是现在有点问题呀,当有配置文件中是分段时,就是说不同的段中有相同的关键字时问题就来了,这样程序只保存一个,不知道应该怎么改。博主能不能改改呀。
4 楼 iissky 2008-09-22  
你们两位真是太棒了!!!!!希望有机会能和你们学习学习。
我的qq:357146094
3 楼 jianrc 2008-04-09  
zhhp1314520 写道
很感谢你的这个class,我正需要这样一个类来处理我的Properties文件。
不过,我在使用的时候还是发现有一个问题,就是如果重新设置原有属性的值时后,程序不是在原来的位置修改属性,而是将原有属性删除,再作为新属性添加,这样属性的位置就发生了变动。稍微修改你的类就可以解决这个问题:
}

是的,当时设计的时候我是故意这么做的,因为我想把修改过的entry放在最后,这么设计可能不够通用,谢谢你的update.
2 楼 jolestar 2008-04-08  
apache下有个高级的properties加载库,不知道如何。
1 楼 zhhp1314520 2008-04-08  
很感谢你的这个class,我正需要这样一个类来处理我的Properties文件。
不过,我在使用的时候还是发现有一个问题,就是如果重新设置原有属性的值时后,程序不是在原来的位置修改属性,而是将原有属性删除,再作为新属性添加,这样属性的位置就发生了变动。稍微修改你的类就可以解决这个问题:
1、首先修改remove方法:
public int remove(String key) {
    for (int index = 0; index < commentOrEntrys.size(); index++) {
	Object obj = commentOrEntrys.get(index);
	if (obj instanceof PropertyEntry) {
		if (obj != null) {
		if (key.equals(((PropertyEntry) obj).getKey())) {
							commentOrEntrys.remove(obj);
							return index;
						}
					}
				}
			}
			return commentOrEntrys.size();
		}


2、修补putOrUpdate方法:
		public void putOrUpdate(String key, String value) {
			PropertyEntry pe = new PropertyEntry(key, value);
			int index = remove(key);
			commentOrEntrys.add(index,pe); 
		}

相关推荐

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

    这篇博客“java修改Properties文件,让输出格式与输入格式保持不变”就探讨了如何解决这个问题。 首先,我们需要理解Java Properties类的默认行为。Properties类在加载和保存文件时,会按照一定的规则进行格式化,如...

    读取以及修改properties文件

    - 使用`java.util.Properties`类:这是Java提供的标准类,用于处理Properties文件。首先,我们需要加载文件到Properties对象中,然后可以通过关键字获取对应的值。 ```java Properties prop = new Properties(); ...

    java 改变Properties文件中的键值

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

    Java internationalization basics.zip_JAVA 国际化_doc_国际化 java

    Java的国际化是通过一系列的API和设计原则来实现的,这些API包括`java.text`、`java.util`和`java.util.locale`包中的类。这些工具使得开发者能够创建可扩展且灵活的应用程序,可以轻松地处理多种语言和文化设置。 ...

    JAVA-Internationalization-tutorial.rar_JAVA 国际化

    5. **Internationalization API**:Java提供了`java.text`和`java.util`包中的API,用于实现国际化功能,如`ResourceBundle`类用于加载资源包,`Format`类家族用于格式化数据。 6. **国际化设计**:在开发阶段,...

    JDK14-internationalization-guide.pdf

    - `java.text.DecimalFormat`和`java.util.Currency`类用于处理货币格式。Java 14可能会扩展对更多国家货币和地区的支持。 - `NumberFormat`接口及其子类用于非货币数值的格式化,确保数字在不同文化背景下的显示...

    JAVA国际化

    在Java中,主要通过`java.util.ResourceBundle`类和`.properties`文件来实现这一功能。 1. **ResourceBundle**:这是Java中的核心类,用于管理应用中的本地化资源。开发者可以为每种语言或地区创建一个对应的...

    最简单的java国际化例子

    Java提供了`java.text.SimpleDateFormat`类来处理日期和时间的格式化,`java.text.NumberFormat`类处理数字,而`java.util.Currency`类则用于货币。这些类都支持根据`Locale`进行自动配置。 例如,如果我们要格式化...

    java国际化代码(jsp)

    资源包通常是`.properties`格式的文本文件,其中包含了键值对,键是不变的标识符,值是根据语言环境变化的文本。例如,一个英语版本的资源包可能包含`greeting=Hello`,而法语版本的资源包则可能是`greeting=...

    国际化 必备工具 java编写

    Java的`java.util.ResourceBundle`类是用来加载和管理这些资源文件的。通过这个类,我们可以根据用户的语言环境动态地加载相应的资源。 3. **Locale类** `java.util.Locale`类用于表示不同的地区设置,如语言、...

    java国际化&时间处理

    开发者可以通过`ResourceBundle`类加载根据不同地区定制的资源文件,这些文件通常以`.properties`格式存储,包含键值对,键是不变的,值是对应语言环境的文本。 在Java中,`java.text`包提供了用于格式化和解析日期...

    Java 程序国际化教程+源码

    `Locale`类包含了与特定地区相关的数据,如日期和数字的格式。 在Java中,资源包(Resource Bundle)是实现国际化的核心。资源包是一系列键值对,存储了应用程序中的文本和其他可变内容,比如错误消息和用户界面...

    java国际化

    这些类可以创建与`Locale`相关的实例,以确保输出符合用户所在地区的标准格式。 总的来说,Java的国际化机制提供了强大的工具,使开发者能够轻松地创建多语言应用。通过`Locale`和`ResourceBundle`,我们可以实现对...

    java socket实现smtp发送邮件,支持SSL

    import java.util.Properties; ``` 2. 设置SMTP服务器的属性,包括主机名、端口、身份验证等: ```java Properties props = new Properties(); props.put("mail.smtp.host", "smtp.qq.com"); // QQ邮箱的SMTP...

    java程序多国语言示例

    Java提供了`java.util.ResourceBundle`类来管理和加载这些资源包。以下是一些关于Java多国语言支持的关键知识点: 1. **Resource Bundle创建**:首先,你需要为每种语言创建一个.properties文件,例如`messages_en....

    JAVA汉化工具

    2. **国际化(i18n)支持**:Java提供了强大的国际化支持,通过`java.util.ResourceBundle`类来管理不同语言的资源。开发者需要在代码中适当地引用这些资源,以便根据用户的系统语言自动加载相应的文本。 3. **编码...

    Java国际化编程及其实现.rar

    在Java中,国际化主要通过java.util包下的Locale、ResourceBundle和Format类来实现。 首先,Locale类代表一个特定的语言环境,包括语言、国家和变体。例如,"zh_CN"代表简体中文,"en_US"代表美式英语。开发者可以...

    java国际化组件

    首先,我们来看一下Java的`java.util.Locale`类。Locale对象用于表示语言、国家和地区,例如"zh_CN"代表简体中文,"en_US"代表美国英语。开发者可以根据用户的系统设置或者用户的选择动态地切换Locale,从而提供相应...

Global site tag (gtag.js) - Google Analytics