`

.xml正向反向取值(之四)

    博客分类:
  • java
 
阅读更多
FileListener类:
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
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.TimerTask;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.kxml2.io.KXmlParser;
import org.kxml2.kdom.Document;
import org.kxml2.kdom.Element;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import com.%##.common.XMLParserHelper;

/* 
 * Class: FileListener
 * Description: 单个文件监听,如果文件已更新则自动重新加载
 * Version: 1.0 
 * Author: Carson.Huang
 * Created on Dec 1, 2010 
 */
public class FileListener extends TimerTask
{	
	private File file = null;
	private long lastModified = 0;
	private Properties prop = new Properties();	
	private Element element = new Element();
	
	private boolean fileFlag = true;
	
    private Logger logger = Logger.getLogger(FileListener.class);
    //所有的枚举文件
    private Map<String,EnumerateFile> enumerateFiles=new HashMap<String,EnumerateFile>();
    //枚举文件
    private List<String> enumPaths=new ArrayList<String>();
    //当前的枚举文件名
    private String currentEnumFilePath="";
    
	FileListener(String filePath)
	{
		//设置所有的枚举文件的信息
		filePath=setEnumInfo(filePath);
		if (filePath != null)
		{
			this.file = new File(filePath);
			if (!file.isFile())
			{
				logger.error("The file[" + filePath + "] doesn't exist, please check it.");
				return;
			}
			
			if (this.file.getName().endsWith(".properties"))
			{
				fileFlag = true;
			}
			else if (this.file.getName().endsWith(".xml"))
			{
				fileFlag = false;
			}
			else
			{
				logger.info("nothing to do...");
			}
			
		}
	}
	
	public void run()
	{
		if (isFileUpdated() && fileFlag)
		{
        	logger.info("The properties file[" + getPath() + "] was modified.");
        	loadFile();
		}else if(isFileUpdated() && !fileFlag){
			StringBuffer sb=new StringBuffer();
			for(String s : enumerateFiles.keySet()){
				sb.append(enumerateFiles.get(s).getReLoadEnumFilePath()).append("\t");
    		}
			logger.info("The properties files[" + sb.toString() + "] was modified.");
			
			loadFile();
		}
		
	}
	
	private boolean isFileUpdated()
	{
		if(this.fileFlag){
			long lastUpdateTime = file.lastModified();
	        return lastUpdateTime > this.lastModified;
		}else{
			return EnumerateFile.checkFileIsModified(enumerateFiles);
		}
    }
	
	public void loadFile()
	{
		if (this.fileFlag)
    	{
    		loadProperties();
    	}
    	else
    	{
    		for(String s : enumerateFiles.keySet()){
    			if(enumerateFiles.get(s).getReLoadEnumFilePath()!=null&&enumerateFiles.get(s).getReLoadEnumFilePath().length()>1){
    				currentEnumFilePath=s;
        			loadXml();
    			}
    		}
    	}
	}
	
分享到:
评论

相关推荐

    opencv的各种haarcascade.xml文件

    haarcascades\haarcascade_eye.xml haarcascades\haarcascade_eye_tree_eyeglasses.xml haarcascades\haarcascade_frontalface_alt.xml haarcascades\haarcascade_frontalface_alt2.xml haarcascades\haar...

    License.xml 破解码

    License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码License.xml 破解码...

    AndroidManifest.xml反编译工具

    在Android应用开发中,`AndroidManifest.xml`是一个至关重要的文件,它包含了应用程序的基本配置和元数据,如应用的包名、所需权限、启动活动、服务、接收器等。本话题将详细探讨`AndroidManifest.xml`的反编译工具...

    javax.xml.bind.jar

    javax.xml.bind.jar

    hibernate.cfg.xml

    hibernate.cfg.xml hibernate框架的配置文件

    javax.xml.ws.Service 报错需要的包

    在Java开发中,`javax.xml.ws.Service` 是一个核心组件,属于Java API for XML Web Services (JAX-WS)的一部分,用于创建客户端和服务端的Web服务代理。报错通常表明缺少必要的依赖包,这可能会影响到程序的正常运行...

    人脸识别需要的haarcascade_frontalface_default.xml文件

    haarcascade_frontalface_default.xml 和 haarcascade_eye.xml 文件是OpenCV库中用于人脸检测和眼睛检测的重要数据结构。 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,...

    javax.xml.bind.jar 包

    在集成阿里云移动推送时,部署到服务器的时候遇到了java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter 错误,产生原因是缺少javax.xml.bind.DatatypeConverter

    提取apk文件中的AndroidManifest.XML

    AndroidManifest.xml是APK的核心组件之一,它提供了应用的基本配置信息,包括应用名称、版本、所需权限、服务、活动、广播接收器等。当我们需要深入分析或修改一个APK时,提取AndroidManifest.xml就显得尤为重要。本...

    maven中settings.xml文件下载

    settings.xml配置

    codetemplates.xml

    codetemplates.xml

    haarcascade_eye.xml

    haarcascade_eye.xml

    unity3d读取xml插件Mono.Xml

    Unity3D是一款强大的跨平台游戏开发引擎,广泛应用...然而,需要注意的是,虽然Mono.Xml提供了基础的XML处理功能,但它的功能相对有限,对于更复杂的需求,可能需要考虑使用其他如System.Xml的库或者第三方XML解析库。

    lang_zh_cn.xml

    foxit reader的中文包lang_zh_cn.xml。

    PluginManagerPlugins.xml文件

    解决Notepad++ Plugin Manager无法加载插件的方法。把PluginManagerPlugins.xml放在这个目录下C:\Users\你主机系统用户\AppData\Roaming\Notepad++\plugins\config 重新打开软件

    apns-conf.xml

    网络上很多的APN文件,看了许多,没有带电信参数的,花费一晚上的时间,通宵写成了这个,确切的说是改成了这个集成了中国电信相关参数的apns-conf.xml文件,借阅请说明出处,谢谢

    Maven原版settings.xml配置文件(下载)

    Maven原版settings.xml配置文件,根据个人需要,可以打开对应注释或替换相关阿里云镜像或远程仓库地址即可使用。

    maven pom.xml 动态读取变量值插件

    该jar包功能,可以在一个properties文件里面定义jdbc.url=${url},在另一个properties文件定义具体的值,通过该jar可以获取到哪个具体的值。下载之后,自行安装到本地...具体pom.xml配置使用可以参考网络其他博文,谢谢

    main-menu.xml

    mysqlWorkbench 汉化

    codetemplates.xml下载(Eclipse 注释代码模板文件)

    codetemplates.xml下载(Eclipse 注释代码模板文件)

Global site tag (gtag.js) - Google Analytics