`

读取修改配置文件

 
阅读更多
读取修改配置文件
分类: util类 2014-07-15 14:37 37人阅读 评论(0) 收藏 举报
ResourceBundle
PropertiesUtil.class.getClassLoader().getResource
PropertiesLoaderUtils.loadProperties(new ClassPathResource(propertyName));

[java] view plaincopy
package com.ffcs.aaa.utils; 
 
import java.io.BufferedWriter; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.OutputStreamWriter; 
import java.net.URLDecoder; 
import java.util.ArrayList; 
import java.util.Enumeration; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Properties; 
import java.util.ResourceBundle; 
 
import org.apache.log4j.Logger; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.support.PropertiesLoaderUtils; 
 
 
public class PropertiesUtil { 
    static Logger log = Logger.getLogger("smsTaskLog"); 
    /**
     * 获取指定配置文件中所以的数据
     * 
     * @param propertyName
     *            调用方式: 1.配置文件放在resource源包下,不用加后缀
     *            PropertiesUtil.loadWarningMessage("warn_message"); 2.放在包里面的
     *            PropertiesUtil.loadWarningMessage("com.test.message");
     * @return
     */ 
    public static Map<String, String> loadProperties(String propertyName) { 
        // 获得资源包 
        ResourceBundle rb=null; 
        try {rb = ResourceBundle.getBundle(propertyName.trim()); 
        } catch (Exception e) {log.error(e.getMessage()); } 
         
        // 通过资源包拿到所有的key 
        Enumeration<String> allKey = rb.getKeys(); 
        // 遍历key 得到 value 
        Map<String, String> messageMap=new HashMap<String, String>(); 
        while (allKey.hasMoreElements()) { 
            String key = allKey.nextElement(); 
            String value = (String) rb.getString(key); 
            messageMap.put(key, value); 
        } 
        return messageMap; 
    } 
 
    /**
     * 传递键值对的Map,更新properties文件
     * 
     * @param fileName 
     *            文件名(放在resource源包目录下),需要后缀 warn_message.properties
     * @param keyValueMap
     *            键值对Map
     */ 
    public static void updateProperties(String fileName,Map<String, String> keyValueMap) { 
        //getResource方法使用了utf-8对路径信息进行了编码,当路径中存在中文和空格时,他会对这些字符进行转换,这样, 
        //得到的往往不是我们想要的真实路径,在此,调用了URLDecoder的decode方法进行解码,以便得到原始的中文及空格路径。 
        String filePath = PropertiesUtil.class.getClassLoader().getResource(fileName).getFile(); 
        Properties props = null; 
        BufferedWriter bw = null; 
 
        try { 
            filePath = URLDecoder.decode(filePath,"utf-8");     
            log.debug("updateProperties propertiesPath:" + filePath); 
            props = PropertiesLoaderUtils.loadProperties(new ClassPathResource(fileName)); 
//          log.debug("updateProperties old:"+props); 
             
            // 写入属性文件 
            bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath))); 
             
            props.clear();// 清空旧的文件 
             
            for (String key : keyValueMap.keySet()) 
                props.setProperty(key, keyValueMap.get(key)); 
             
            log.debug("updateProperties new:"+props); 
            props.store(bw, ""); 
        } catch (IOException e) { 
            log.error(e.getMessage()); 
        } finally { 
            try { 
                bw.close(); 
            } catch (IOException e) { 
                e.printStackTrace(); 
            } 
        } 
    } 
 
    /**
     * 判断指定配置文件中是否存在该项 Spring 提供的 PropertiesLoaderUtils 允许您直接通过基于类路径的文件地址加载属性资源
     * 最大的好处就是:实时加载配置文件,修改后立即生效,不必重启
     * 
     * @param propertyName
     *            要加上后缀:warn_message.properties
     * @param key
     * @return true:false
     */ 
    public static boolean containKey(String propertyName, String key) { 
        Properties props = null; 
        try { 
            props = PropertiesLoaderUtils.loadProperties(new ClassPathResource(propertyName)); 
        } catch (IOException e) { 
            log.error(e.getMessage()); 
        } 
        log.debug("props content:"+props); 
        return props.containsKey(key); 
    } 
     
     
 
    private  void test() { 
        List<String> l = new ArrayList<String>(); 
        l.add("192.168.14.63");l.add("192.168.14.62");l.add("192.168.14.61"); 
 
        Map<String, String> map = new HashMap<String, String>(); 
        for (String key : l) { 
            boolean containKey = PropertiesUtil.containKey("warn_message.properties", key); 
            log.debug(key+":"+containKey); 
            map.put(key, ""); 
        } 
        PropertiesUtil.updateProperties("message.properties", map); 
        System.out.println("================================================"); 
        for (String key : l) { 
            boolean containKey = PropertiesUtil.containKey("warn_message.properties", key); 
            log.debug(key+":"+containKey); 
            map.put(key, ""); 
        } 
    } 
 
     
    public static void main(String[] args) { 
        loadProperties("a"); 
    } 
 
分享到:
评论

相关推荐

    C# winform 读取修改配置文件

    本文将详细讲解如何在Winform中读取和修改配置文件,特别是`appSettings`部分,这对于大多数桌面应用来说是至关重要的功能。 配置文件在.NET Framework中通常以`.config`为扩展名,例如`app.config`或`web.config`...

    读取xml配置文件的flash导航菜单

    在这个“读取xml配置文件的flash导航菜单”项目中,开发人员创建了一个动态的Flash菜单系统,该系统能够从外部XML文件中获取其配置信息,从而实现菜单项的动态加载和更新。下面将详细解释这个技术实现的各个方面。 ...

    C# .net读取ini配置文件

    ### C# .NET读取INI配置文件的知识点详解 #### 一、概述 在软件开发过程中,经常会遇到需要根据不同的环境或用户需求调整程序配置的情况。例如,更改数据库连接字符串、FTP登录凭证等。传统的做法是在代码中硬编码...

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

    本篇文章将详细探讨如何通过Python来读取并解析`.properties`配置文件。 首先,了解`.properties`文件的格式。这种文件通常用于存储配置信息,其中键值对以等号`=`分隔,每一行代表一个键值对,注释以`#`或`!`开始...

    C#读取配置文件详解教程

    C# 读取配置文件详解教程 配置文件是 C# 中的一个重要概念,它允许开发人员存储和读取应用程序的配置信息。配置文件是标准的 XML 文件,XML 标记和属性是区分大小写的。开发人员可以使用配置文件来更改设置,而不必...

    JAVA高手解析XML配置文件的读取操作.pdf

    使用 XML 作为配置文件有很多好处,例如可以轻松地更改配置项,而不需要修改代码。 在读取 XML 配置文件时,有多种解析器可以选择,主要有 DOM 和 SAX 两种。DOM 解析器将整个 XML 文件加载到内存中,然后进行解析...

    ubuntu系统读取ini配置文件

    本模块提供了一种在Ubuntu环境下使用C++读取INI配置文件的方法,使得开发者能方便地获取和修改配置信息。以下是关于这个功能模块的关键知识点和实现细节: 1. **INI文件格式**:INI文件是一种简单的文本格式,通常...

    java读取配置文件

    配置文件通常用于存储应用程序的设置,如数据库连接信息、服务器端口、第三方服务的API密钥等,这些信息可能需要根据不同的环境或需求进行更改。在Java中,我们可以使用多种方法来读取配置文件,下面将详细介绍几种...

    config_ini配置文件读取_

    在本案例中,我们将讨论如何使用Qt库在界面上进行`config_ini`配置文件的读取和写入操作。 Qt是一个跨平台的C++图形用户界面应用程序开发框架,提供了丰富的API用于处理文件I/O和GUI构建。对于`config.ini`文件的...

    LabVIEW 写入与读取配置文件

    在实际项目中,可能需要在程序启动时自动加载配置文件,或者在用户更改设置后保存新的配置。这可以通过事件结构实现,如程序初始化时触发的"Program Start"事件中读取配置,而在用户按下“保存”按钮时触发的用户...

    VC读取动态配置文件

    本示例着重介绍如何在不修改源代码的情况下,通过VC++实现对配置文件的读取和动态更新。 首先,我们需要理解配置文件的基本结构。以常见的INI文件为例,它由多个节(Section)组成,每个节下可以有多个键值对(Key-...

    使用Java读取XML配置文件

    只要更改 XML 配置文件,就可以正常运行。 例如,我们可以定义一个 XML 配置文件 myenv.xml,内容如下: ```xml &lt;dbhost&gt;localhost &lt;dbname&gt;sqlname &lt;dbuser&gt;username &lt;dbpassword&gt;password ``` 这个 ...

    unity读取excel配置文件插件

    总之,"unity读取excel配置文件插件"是Unity开发者的重要工具,它简化了游戏配置数据的管理,让策划人员能够更轻松地修改Excel表格,同时保持代码与数据的分离。通过熟练掌握这种插件的使用,你可以提高开发效率,使...

    读取配置文件代码

    在Java编程中,读取配置文件是常见的任务,它允许我们分离应用程序的配置信息,使得配置可以在不修改源代码的情况下更改。本示例将详细解释如何使用Java来读取configuration配置文件中的内容,以实现更灵活和可维护...

    spring读取配置文件

    这种方式更适用于配置文件位于项目外部或者需要动态更改配置文件的情况。例如,如果配置文件位于`/path/to/config/applicationContext.xml`,则可以这样创建上下文: ```java ApplicationContext context = new ...

    C#读取INI配置文件

    在Microsoft .NET Framework环境下,C#作为主要的编程语言,提供了丰富的类库来处理各种文件类型,包括传统的INI配置文件。INI文件是一种简单的文本格式,常用于存储应用程序的配置信息,如设置、选项等。在Visual ...

    c# 通过配置文件读取数据库连接字符创,读取配置文件值

    在C#编程中,配置文件是一个非常重要的组成部分,它允许开发者在不修改代码的情况下更改应用程序的行为。本篇文章将深入探讨如何使用C#通过配置文件读取数据库连接字符串和其他配置值,以及这样做的好处。 首先,...

    c++读取配置文件

    - **配置更新**:如果配置文件在运行时更改,可能需要重新加载或监听文件变化。 通过上述方法,你可以有效地在C++程序中读取和解析TXT格式的配置文件,灵活地管理应用程序的行为。在实际项目中,可能还会使用第三...

    android项目中读取ini配置文件

    本文将详细介绍如何在Android项目中读取存放在`assets`文件夹中的`ini`配置文件。 1. **ini文件格式介绍** `ini`文件是一种轻量级的配置文件格式,主要用于存储键值对数据。通常,每个节(section)以方括号`[]`...

    java读取properties配置文件

    本文将详细介绍如何在Java中读取`properties`配置文件。 首先,我们需要了解`properties`文件的格式。一个标准的`.properties`文件通常包含多个行,每行由一个键和一个值组成,它们之间用等号(`=`)或冒号(`:`)...

Global site tag (gtag.js) - Google Analytics