如下是代码:
/** * Created with malone * User: P0032597 * Date: 13-8-20 * Time: 下午4:13 */ public class PropertiesUtil { private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class); private Properties props = new Properties(); private File file; /** * 构造函数 * @param propertiesName 文件名称 */ public PropertiesUtil(String propertiesName) { URL url = Thread.currentThread().getContextClassLoader().getResource(propertiesName); Assert.assertNotNull(url); String urlStr = url.toString(); urlStr = urlStr.replace("file:/", ""); urlStr = urlStr.replace("/", "\\"); File file = new File(urlStr); this.propsLoad(file); } /** * 构造函数 * @param file 文件 */ public PropertiesUtil(File file) { this.propsLoad(file); } /** * 辅助方法,根据file创建工具对象 * @param file */ private void propsLoad(File file) { FileReader reader = null; try { this.file = file; reader = new FileReader(file); props.load(reader); } catch (FileNotFoundException e) { e.printStackTrace(); // System.exit(-1); logger.error("error status", e); } catch (IOException e) { // System.exit(-1); e.printStackTrace(); logger.error("error status", e); } finally { try { if (reader != null) { reader.close(); } } catch (IOException e) { logger.error("error!", e); } } } /** * 根据key获取value * @param key * @return */ public String getKeyValue(String key) { return props.getProperty(key); } /** * 向properties文件写入键值对 * @param keyName * @param keyValue */ public void writeProperties(String keyName, String keyValue) { Map<String, String> propertiesMap = new HashMap<String, String>(); propertiesMap.put(keyName, keyValue); batchWriteProperties(propertiesMap); } /** * 批量更新properties的键值对 * @param propertiesMap */ public void batchWriteProperties(Map<String, String> propertiesMap) { FileWriter writer = null; try { // 调用 Hashtable 的方法 put,使用 getProperty 方法提供并行性。 // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。 writer = new FileWriter(this.file); // OutputStream fos = new FileOutputStream(profilepath); for (String key : propertiesMap.keySet()) { this.props.setProperty(key, propertiesMap.get(key)); } // 以适合使用 load 方法加载到 Properties 表中的格式, // 将此 Properties 表中的属性列表(键和元素对)写入输出流 this.props.store(writer, "batch update"); } catch (IOException e) { logger.error("error status", e); } finally { try { if (writer != null) { writer.close(); } } catch (IOException e) { logger.error("error!", e); } } } /** * 更新properties文件 * @param keyName 名称 * @param keyValue 值 */ public void updateProperties(String keyName,String keyValue) { Map<String, String> propertiesMap = new HashMap<String, String>(); propertiesMap.put(keyName, keyValue); this.batchUpdateProperties(propertiesMap); } /** * 批量更新键值对 * @param propertiesMap */ public void batchUpdateProperties(Map<String, String> propertiesMap) { BufferedWriter output = null; try { // 调用 Hashtable 的方法 put,使用 getProperty 方法提供并行性。 // 强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。 // OutputStream fos = new FileOutputStream(profilepath); output = new BufferedWriter(new FileWriter(this.file)); for (String key : propertiesMap.keySet()) { this.props.setProperty(key, propertiesMap.get(key)); } // 以适合使用 load 方法加载到 Properties 表中的格式, // 将此 Properties 表中的属性列表(键和元素对)写入输出流 props.store(output, "batch update "); } catch (IOException e) { logger.error("error status", e); } finally { try { if (output != null) { output.close(); } } catch (IOException e) { logger.error("error!", e); } } } }
自己对自己封装代码的理解,希望大家批评指正:
在这个工具类里,不是使用常规的工具类封装方式,即方法不是static的, 在此不使用static来修饰方法的原因:
如果工具方法使用static, 则成员变量也需使用static关键字, 对于想同时操作多个properties文件时,就要切换props加载的properties文件,因为props为static的,
所以就会造成不知道当前工具类究竟操作的是哪个properties文件(当前加载了a.properties,可能系统其他的代码调用工具类,加载了b.properties,你并不知道,所以会导致一系列的错误),
所以在使用的时候就new出一个工具类
相关推荐
封装得很好的一个properties操作类
2. **创建properties工具类** 一个基本的`PropertiesUtil`工具类可能包含以下方法: - `loadProperties`: 加载`.properties`文件到`Properties`对象。 - `getProperty`: 根据键获取值。 - `setProperty`: 设置或...
针对这个问题,开发者们创建了`CommentedProperties`这样的工具类,以保留属性文件中的注释信息。 `CommentedProperties`是基于Java的自定义Properties扩展,它的核心功能在于加载和保存文件时能够识别并保留注释。...
在Java编程中,Properties类是用于处理属性文件的关键工具,它...通过创建这样的Properties工具类,我们可以简化与属性文件交互的代码,提高代码的可读性和可维护性。在实际项目中,这样的工具类是非常常见且实用的。
java对properties的操作工具类 属性文件
1.OutputOrderProperties p = new OutputOrderProperties(); 2.FileInputStream fs = new FileInputStream("文件路径"); 3.p.load(new InputStreamReader(fs, "utf-8")); 4.p.put("jdbc.name", dbConfig.getJdbcName...
下载了就可以直接用。默认路径在项目随意source目录下,获取时直接PropertiesUtil.getInstance().getPropertyValue("xx.properties", "value");
本篇文章将探讨如何设计一个`properties`读取工具类,以便高效、灵活地从这些文件中读取和管理配置参数。 首先,我们需要创建一个`PropertiesUtil`类,它将包含读取`properties`文件的核心方法。这个工具类通常会有...
此工具类只用于Java后端在操作Properties文件的时候写的工具类,方便properties文件的存取操作
在Java编程中,`Property`工具类和`Properties`文件工具类是处理配置文件的关键组件。这些工具类帮助开发者读取、写入以及管理应用程序的配置信息,通常以`.properties`文件的形式存在。`.properties`文件是一种键值...
Java读取、修改utils.properties工具类,可直接拿去用。
通过程序生成properties文件的工具类,并可根据添加顺序生成,可添加注释,调用步骤如下: 1.OutputOrderProperties p = new OutputOrderProperties(); 2.FileInputStream fs = new FileInputStream("文件路径"); 3....
`RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...
总之,“Properties文件比较工具”是Java开发中一个实用的小型应用,它利用了Java标准库提供的`Properties`类,为开发者提供了便利,提高了工作效率。通过分析`diffProperties.java`和`property.java`源代码,我们...
另外,Properties类还可以与其他工具类结合使用,例如ResourceBundle,以实现国际化(i18n)功能。通过不同语言的.properties文件,我们可以为不同地区的用户提供本地化的消息。 总结起来,Properties类是Java中...
java连接SqlServer完整代码,工具类,jdbc JDBC工具类的构建 1.资源释放 见https://mp.csdn.net/postedit/86577443 2.驱动防二次注册 ``` Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //...
这个工具类的创建旨在简化邮件处理的复杂性,使开发者能够便捷地集成邮件功能。以下是对JavaMail工具类及其相关知识点的详细说明: 1. **JavaMail API**: JavaMail API 是Java平台上的标准邮件接口,提供了发送、...
Java 读取、获取配置文件.properties 中的数据有多种方法,包括使用 Properties 类、封装的 Properties 工具类和其他方法。在实际应用中,我们可以根据需要选择合适的方法来读取 Properties 文件。
接下来是`PropertiesUtil.java`,这个工具类专注于处理传统的`.properties`配置文件。Properties文件是Java内置支持的一种格式,通常用于存储键值对。`PropertiesUtil`可能包含以下方法: 1. 加载Properties文件:...