项目需求,发布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;
}