1.BaseFileConfig:
public abstract class BaseFileConfig {
private FileReader fileReader;
private BufferedReader bufferedReader ;
public abstract void initConfiguration(String filePath);
// public abstract String listConfiguration();
protected abstract void setFileLastModified(long time);
public abstract long getFileLastModified();
protected BufferedReader readFile(String filePath) throws FileNotFoundException{
File file = new File(filePath);
//set file last modified Time
long time = file.lastModified();
setFileLastModified( time);
//read file
fileReader=new FileReader(file);
bufferedReader = new BufferedReader(fileReader);
return bufferedReader;
}
protected void closeReadFile() throws IOException{
if (bufferedReader!=null){
bufferedReader.close();
}
if (fileReader!=null){
fileReader.close();
}
}
}
2.UserConfig.conf
public class UserConfig extends BaseFileConfig {
private static Logger logger = LoggerFactory.getLogger(UserConfig.class);
private static long lastModifiedTime = 0;
private long startTime;
private Map<String, UserInfo> users;
private static boolean isReady = false;
private static UserConfig instanced = new UserConfig();
private UserConfig() {
if (!isReady){
isReady = true;
String path = SystemConfig.getUser_conf_path();
initConfiguration(path);
}
}
public static UserConfig getInstanced() {
return instanced;
}
@Override
public void initConfiguration(String filePath) {
// first step, read file
// second step, init configuration
// third step, close red file
if (filePath == null) {
logger.info("file path is null");
return;
}
BufferedReader bf = null;
Map<String, UserInfo> userMap = new HashMap<String, UserInfo>();
try {
bf = readFile(filePath);
if (bf == null) {
logger.info("file is empty");
return;
}
String line = null;
while ((line = bf.readLine()) != null) {
String[] arr = line.split(",");
if (arr.length == 2) {
UserInfo userInfo = new UserInfo();
userInfo.setUsername(arr[0]);
userInfo.setPassword(arr[1]);
userMap.put(arr[0].trim(), userInfo);
}
}
if (userMap.size() > 0) {
users = userMap;
}
} catch (FileNotFoundException e) {
logger.error("action:config;error message:" + e.getMessage());
} catch (IOException e) {
logger.error("action:config;error message:" + e.getMessage());
} finally {
try {
closeReadFile();
} catch (IOException e) {
logger.error("action:config;error message:" + e.getMessage());
}
}
@Override
protected void setFileLastModified(long time) {
// TODO Auto-generated method stub
lastModifiedTime = time;
}
@Override
public long getFileLastModified() {
// TODO Auto-generated method stub
return lastModifiedTime;
}
}
}
public Map<String, UserInfo> getUsers() {
long endTime = System.currentTimeMillis();
long readTime = endTime - startTime;
if (readTime > Long.parseLong(SystemConfig.getProperty("user_conf.timeout.time")) * 1000){
String path = SystemConfig.getUser_conf_path();
File file = new File(path);
long lastRead = file.lastModified();
if (lastModifiedTime != lastRead) {
initConfiguration(path);
}
startTime = endTime;
}
if(users != null){
return users;
}
return null;
}
public UserInfo getUser(String userName){
if (userName==null){
return null;
}
if (users!=null){
return users.get(userName);
}
return null;
}
这个conf文件的格式是:
xxx,yyyy