package com.citic.util.comm;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.Map.Entry;
import com.citic.util.comm.*;
public class ConfigFileUtil implements IConstants{
private String dataFilepath;
private static Properties property;
private static File flname;
private static File dflname;
private static Map<String, String> hm = new LinkedHashMap<String, String>();
private static ConfigFileUtil cfgu;
/******************************/
//只能使用0,不能改为其它,请注意,否则
//,则会和CommFun中的调用形成循环,此两个基础过程慎改
//张明伟 20170518
private static final int debuglevel=0;
/******************************/
/*
* 由于暂时未实现对数据
* 如果当前目录未有配置文件数据,则直接在当前目录下生成
* 此类中要防止方法嵌套调用
*/
private ConfigFileUtil(){
if (0 == hm.size()) {
InputStream in=null;
String fl = File.separator+config;
String destfile = System.getProperty("user.dir").trim() + fl;
String srcfile ;//= (this.getClass().getResource(File.separator).getPath() + fl).substring(1);
// srcfile = (this.getClass().getResource("/").getPath()+fl).substring(1);
srcfile = ClassLoader.class.getResource("/"+config).getPath();
System.out.println("destfile is [" + destfile+ "] and \nsrcfile is [" + srcfile + "]");
CommFun.log(debuglevel, "destfile is [" + destfile
+ "] and \nsrcfile is [" + srcfile + "]");
flname = new File(srcfile);
dflname = new File(destfile);
CommFun.log(debuglevel,"flname " + flname.getPath() + "");
CommFun.log(debuglevel,"flname " + flname.length() + "");
// 如果项目下文件不存丰或者文件少于120字节或者项目下文件创建时间比原文件晚,需要重新拷贝
try {
System.out.println(flname.length());
System.out.println(dflname.length());
System.out.println(dflname.exists());
System.out.println(new Date(flname.lastModified()));
System.out.println(new Date(dflname.lastModified()));
boolean needcrtflag=false;
if (!dflname.exists() || dflname.length() < 120
|| flname.lastModified() > dflname.lastModified()) {
// in = this.getClass().getResourceAsStream("/"+configfile);
in = ConfigFileUtil.class.getClass().getResourceAsStream("/"+config);
FileOperation.propertity2File("/"+config,destfile);
needcrtflag=true;
CommFun.log(debuglevel,dflname + "is need to create!config file is created!");
System.out.println(dflname + "is need to create!config file is created!");
} else {
in = new FileInputStream(System.getProperty("user.dir")+ fl);
CommFun.log(debuglevel,""+in+","+in.available());
CommFun.log(debuglevel,dflname + "is exists!read from local directory!");
}
property = new Properties();
property.load(in);
} catch (Exception e) {
throw new RuntimeException(e);
} finally{
try {
if(in!=null){
in.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
Iterator itr = property.entrySet().iterator();
while (itr.hasNext()) {
Entry e = (Entry) itr.next();
hm.put(e.getKey().toString().toUpperCase(), e.getValue()
.toString());
}
// hm.put("dataFilepath", getPath());
hm.put("osName", System.getProperty("os.name").toLowerCase());
}
}
public static synchronized ConfigFileUtil getInstance(){
if(cfgu==null){
cfgu=new ConfigFileUtil();
}
return cfgu;
}
public static String getValue(String key) {
if (0 == hm.size()) {
getInstance();
}
String vlu = hm.get(key.toUpperCase());
if(vlu == null || "".equals(vlu)){
CommFun.log(debuglevel, "配置表中不存在键值为["+key+"]的配置,请检查!");
//System.out.println("配置表中不存在键值为["+key+"]的配置,请检查!");
}
try{
int commentpos=0;
commentpos=vlu.indexOf("#");
vlu=vlu.substring(0, commentpos).trim();
}catch(Exception e){
}
return vlu == null || "".equals(vlu) ? "" : vlu;
}
/**
* 设置值的时间不区分大小写
* @param key
* @param value
*/
public static void setValue(String key,String value) {
if (0 == hm.size()) {
getInstance();
}
if(hm.containsKey(key.toUpperCase())){
hm.remove(key.toUpperCase());
}
hm.put(key.toUpperCase(), value);
CommFun.log(debuglevel, "key:["+key+"],value:["+getValue(key)+"]");
}
public String[] getValues() {
String[] vlus = new String[hm.size()];
Iterator itr = hm.entrySet().iterator();
for (int i = 0; itr.hasNext(); i++) {
Entry e = (Entry) itr.next();
vlus[i] = e.getKey().toString() + "=" + e.getValue().toString();
}
return vlus;
}
public String getPathName() {
return getPathName(null);
}
public String getPathName(String dataDate) {
try {
String td;
if ("".equals(dataDate) || dataDate == null) {
td = new SimpleDateFormat("yyyyMMdd").format(new Date());
} else {
td = dataDate;
}
String osName = System.getProperty("os.name").toLowerCase();
if (osName.startsWith("win")) {
dataFilepath = getValue("DFILEPATH_WIN");
} else {
dataFilepath = getValue("DFILEPATH_LIN");
}
if("".equals(dataFilepath)||dataFilepath==null){
//CommFunN.log(1, "路径"+dataFilepath+"不存在,请检查配置文件中!");
System.out.println("路径"+dataFilepath+"不存在,请检查配置文件中!");
}
//CommFunN.log(1, dataFilepath);
dataFilepath += dataFilepath.lastIndexOf(File.separator)
- dataFilepath.length() != 0 ? File.separator : "";
File fdir = new File(dataFilepath + td + File.separator);
if (fdir != null && !fdir.exists()) {
fdir.mkdirs();
}
dataFilepath = dataFilepath + td + File.separator;
//CommFunN.log(dataFilepath);
return dataFilepath;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public void initConfigfile1() {
String fl = config;
File f = new File(fl);
FileWriter fw = null;
try {
if (f.exists()) {
System.out.print("配置文件已存在,是否覆盖?(y/n)");
Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine().toUpperCase();
System.out.println("str is [" + str + "]");
if ("".equals(str) || str == null || "N".equals(str)) {
return;
}
}
ConfigFileUtil cfg = new ConfigFileUtil();
int len = (cfg.getValues()).length;
System.out.println("len is [" + len + "]");
String tmpstr = null;
if (len < 3) {
return;
}
fw = new FileWriter(f);
for (int i = 0; i < len; i++) {
tmpstr = cfg.getValues()[i].toString();
fw.write(tmpstr, 0, tmpstr.length());
fw.write("\n");
}
fw.write("#"
+ new SimpleDateFormat("yyyy年MM月dd日 HH时mm分SS秒")
.format(new Date()) + "写入");
fw.flush();
fw.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}