修改配置文件中的值

       项目需求,发布war包时,需用界面来修改war包中的配置文件,就不用手动配置了。发布war包(将war包解压,查询指定的配置文件,获取配置文件目录,修改配置文件后,再打压成war包上传到发布目录即可),代码省略此处。

       修改配置文件有两种方法:

       第一种:通过读写文件来修改配置文件中的值,该方法可以保持配置文件原始的格式和注释存在。推荐该方法:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.util.Map;

public class PropertiseUtil {

/**

* 更新properties文件

*/

public static boolean updateProperties(Map<String, String> map,String url) {

try {

readFile02(map,url);

} catch (IOException e) {

e.printStackTrace();

return false;

}

return true;

}

private static void readFile02(Map<String,String> map,String url) throws IOException {

        FileInputStream fis=new FileInputStream(url);

        InputStreamReader isr=new InputStreamReader(fis, "UTF-8");

        BufferedReader br = new BufferedReader(isr);

        String line="";

        StringBuffer sb = new StringBuffer("");

        

        while ((line=br.readLine())!=null) {

        String a = "";

        String b = "";

//        System.out.println(line);

        boolean mm = line.contains("#");

        if("".equals(line)||mm){

        sb.append(line+"\n");

        }else{

        a = line.split("=")[0].trim();

        b = line.split("=")[1].trim();

       

        if(map.containsKey(a)){

        b = map.get(a);

        }

       

        sb.append(a+"="+b+"\n");

        }

        }

//        System.out.println(sb.toString());

        br.close();

        isr.close();

        fis.close();

        

        writeFile(sb.toString(),url);

    }

    private static void   writeFile(String properties,String url) throws IOException {

        //写入中文字符时解决中文乱码问题

        FileOutputStream fos=new FileOutputStream(new File(url));

        OutputStreamWriter osw=new OutputStreamWriter(fos, "UTF-8");

        BufferedWriter  bw=new BufferedWriter(osw);

       

        bw.write(properties);

        

        

        //注意关闭的先后顺序,先打开的后关闭,后打开的先关闭

        bw.close();

        osw.close();

        fos.close();

    }

}

       第二种:利用Properties对象来修改配置文件,根据setProperty(key,value)方法修改配置文件,key相同则修改,不同则新增。此方法有弊端,就是配置文件中的注释不会写入进去,而且每执行一次,配置文件就会新增。此方法不推荐。

Map<String, String> map = getBeanFieldsMap(provo, unwarproPath);  //获取需修改的

Properties prop = new Properties();  

    try {  

        File file = new File(unwarproPath);  

        if (!file.exists())  

        return false;

        InputStream fis = new FileInputStream(file);  

        prop.load(fis);  

        //一定要在修改值之前关闭fis  

        fis.close();  

        OutputStream fos = new FileOutputStream(unwarproPath);  

        for(java.util.Map.Entry<String, String> entry:map.entrySet()){

        String key = entry.getKey();

        String value = entry.getValue();

        prop.setProperty(key, value);

        //保存,并加入注释  

             prop.store(fos, "update '" + key + "' value  修改数据"); 

        }

        

        fos.close();  

        

        return true;

    } catch (IOException e) {  

        e.printStackTrace();

        return false;

    } 

猜你喜欢

转载自zhao103804.iteye.com/blog/2245033
今日推荐