`

properties 工具类

阅读更多

如下是代码:

/**
 * 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工具类

    封装得很好的一个properties操作类

    读取properties文件工具类

    2. **创建properties工具类** 一个基本的`PropertiesUtil`工具类可能包含以下方法: - `loadProperties`: 加载`.properties`文件到`Properties`对象。 - `getProperty`: 根据键获取值。 - `setProperty`: 设置或...

    能保存Properties文件注释的Properties工具类

    针对这个问题,开发者们创建了`CommentedProperties`这样的工具类,以保留属性文件中的注释信息。 `CommentedProperties`是基于Java的自定义Properties扩展,它的核心功能在于加载和保存文件时能够识别并保留注释。...

    读取Properties信息工具类

    在Java编程中,Properties类是用于处理属性文件的关键工具,它...通过创建这样的Properties工具类,我们可以简化与属性文件交互的代码,提高代码的可读性和可维护性。在实际项目中,这样的工具类是非常常见且实用的。

    java对properties的操作工具类

    java对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...

    properties 工具类 PropertiesUtil java

    下载了就可以直接用。默认路径在项目随意source目录下,获取时直接PropertiesUtil.getInstance().getPropertyValue("xx.properties", "value");

    properties读取工具类设计

    本篇文章将探讨如何设计一个`properties`读取工具类,以便高效、灵活地从这些文件中读取和管理配置参数。 首先,我们需要创建一个`PropertiesUtil`类,它将包含读取`properties`文件的核心方法。这个工具类通常会有...

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

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

    Property工具类,Properties文件工具类,PropertiesUtils工具类

    在Java编程中,`Property`工具类和`Properties`文件工具类是处理配置文件的关键组件。这些工具类帮助开发者读取、写入以及管理应用程序的配置信息,通常以`.properties`文件的形式存在。`.properties`文件是一种键值...

    utils.properties修改、读取工具类

    Java读取、修改utils.properties工具类,可直接拿去用。

    java生成properties文件工具类

    通过程序生成properties文件的工具类,并可根据添加顺序生成,可添加注释,调用步骤如下: 1.OutputOrderProperties p = new OutputOrderProperties(); 2.FileInputStream fs = new FileInputStream("文件路径"); 3....

    Rabbitmq工具类,java工具类RabbitmqUtil

    `RabbitmqUtil` 是一个专门为Java开发者设计的工具类,简化了与RabbitMQ交互的复杂过程,使得开发者能够更快速、更方便地发送和接收消息。 首先,我们来详细了解一下`RabbitmqUtil`工具类的主要功能: 1. **连接...

    Properties 文件比较工具

    总之,“Properties文件比较工具”是Java开发中一个实用的小型应用,它利用了Java标准库提供的`Properties`类,为开发者提供了便利,提高了工作效率。通过分析`diffProperties.java`和`property.java`源代码,我们...

    Properties类小结

    另外,Properties类还可以与其他工具类结合使用,例如ResourceBundle,以实现国际化(i18n)功能。通过不同语言的.properties文件,我们可以为不同地区的用户提供本地化的消息。 总结起来,Properties类是Java中...

    java连接SqlServer完整代码,工具类,jdbc

    java连接SqlServer完整代码,工具类,jdbc JDBC工具类的构建 1.资源释放 见https://mp.csdn.net/postedit/86577443 2.驱动防二次注册 ``` Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); //...

    java mail工具类

    这个工具类的创建旨在简化邮件处理的复杂性,使开发者能够便捷地集成邮件功能。以下是对JavaMail工具类及其相关知识点的详细说明: 1. **JavaMail API**: JavaMail API 是Java平台上的标准邮件接口,提供了发送、...

    Java 读取、获取配置文件.properties中的数据

    Java 读取、获取配置文件.properties 中的数据有多种方法,包括使用 Properties 类、封装的 Properties 工具类和其他方法。在实际应用中,我们可以根据需要选择合适的方法来读取 Properties 文件。

    java配置文件修改读取工具类,包括yml和properties类型文件

    接下来是`PropertiesUtil.java`,这个工具类专注于处理传统的`.properties`配置文件。Properties文件是Java内置支持的一种格式,通常用于存储键值对。`PropertiesUtil`可能包含以下方法: 1. 加载Properties文件:...

Global site tag (gtag.js) - Google Analytics