`

如何读取.conf文件以及实时更新文件内容

    博客分类:
  • Java
阅读更多

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

分享到:
评论

相关推荐

    解决Cent0S 6.7直接在/etc/resolv.conf文件下修改DNS地址重启不生效问题

    在Linux系统中,尤其是CentOS 6.7版本,配置网络连接时,有时会遇到一些问题,例如在`/etc/resolv.conf`文件中修改DNS地址后,重启系统或网络服务,这些更改不会生效。这个问题通常与网络服务的管理方式有关,特别是...

    xinput-calibrator进行校准后自动生成99-calibration.conf配置文件的python脚本

    4. **文件读写操作**:`get-precalib.py`可能包含了读取校准结果并写入配置文件的功能。这需要用到Python的`open()`函数和文件操作方法,如`write()`。 5. **错误处理**:良好的脚本会包含异常处理代码,以应对可能...

    sysctl.conf中文参数指南[收集].pdf

    下面是sysctl.conf文件中的重要参数解释: 1. dev.scsi.logging_level = 0 这个参数控制SCSI设备的日志级别。设置为0表示不记录任何日志信息。如果将其设置为1或更高,可以记录更多的日志信息。 2. dev.raid....

    配置文件读取

    Java配置文件读取,采用单例模式加载config.properties

    conf:使用Java读取各种配置文件的类库

    这是一个解决Java开发中读取配置文件每次都要重写的困惑。 特性 开箱即用,简单方便 支持JDK1.6+ 无需过多依赖,按需添加 状态 [已完成] 解析Properties配置文件 [待完成] 解析Xml配置文件 [待完成] 解析Ini配置...

    如何设置Sysctl.conf用以提高Linux的性能(最完整的).docx

    `/etc/sysctl.conf`文件是用于持久化设置的关键文件之一。它使用与`rc.conf`类似的格式,即`variable=value`形式。当系统启动并进入多用户模式后,这些设置会生效。 #### 示例配置项解析 下面是一些示例配置项的...

    vdr的小频道扫描工具,可生成ATSC、DVB-C、DVB-SS2和DVB-Tchannels.conf文件。_C_Sh.zip

    5. 更新VDR配置:重启VDR服务,使其读取新的channels.conf文件,从而更新频道列表。 请注意,w_scan的使用可能需要对数字电视广播有一定了解,包括频率规划、调谐器设置等。如果你不熟悉这些概念,可能需要查阅相关...

    oscam.conf配置方法

    在 [global] 段中,我们可以设置服务的绑定 IP 地址、缓冲请求延迟、日志文件、禁用日志文件、用户注册日志文件、日志文件格式、协议、usrfile 日志模式、CW 缓冲日志目录、客户端超时时间、读取器超时时间、客户端...

    Apache的httpd.conf文件常用指令解释

    ### Apache的httpd.conf文件常用指令解释 #### ServerType standalone `ServerType standalone` 这条指令用于指定Apache服务器的工作模式。此处设置为 `standalone` 表示Apache将以独立服务器模式运行,即不依赖于...

    svn配置文件...............

    4. **用户权限**:在配置文件中,可以定义哪些用户或用户组可以访问哪些仓库,以及他们具有读取、写入还是完全控制的权限。例如,使用`authz`文件可以实现基于路径的访问控制,允许精细的权限管理。 5. **SSL/TLS...

    Python库 | genie.libs.conf-3.1.3-py3-none-any.whl

    "genie.libs.conf"提供了读取、写入和操作配置文件的API,支持常见的配置格式如JSON、YAML、INI等。通过这些API,开发者可以方便地获取、修改和保存配置信息,无需关心底层文件的具体细节,从而专注于业务逻辑的实现...

    lilo.conf-lilo的配置文件。[归类].pdf

    《lilo.conf——详解Linux引导装载程序的配置文件》 `lilo.conf`是Linux操作系统中引导装载程序LILO(LInux LOader)的主要配置文件,它位于系统的`/etc`目录下,用于控制LILO的行为和启动选项。本文将深入解析`...

    notepad++编辑nginx配置文件支持高亮

    5. 最后,打开一个Nginx配置文件(.conf),Notepad++应该会自动识别并应用高亮显示。 这个过程的关键在于理解Notepad++的用户定义语言机制。XML文件中的每一项规则对应了配置文件中的语法元素,比如: - `...

    Python库 | b3j0f.conf-0.3.16.tar.gz

    4. **动态更新**:`b3j0f.conf`支持配置的动态更新,使得在运行时可以修改并应用新的配置,而无需重启应用。 5. **易于使用**:库的API设计简洁,易于理解和使用,让开发者能够快速上手。 6. **可扩展性**:库的...

    tunsafe 配置文件

    2. **Mullvad-*.conf文件**:这些文件是Tunsafe用于连接Mullvad(一家知名的虚拟私人网络服务提供商)的特定服务器配置。每个以"Mullvad"命名的文件代表一个不同的服务器位置,例如"mullvad-fi1.conf"表示芬兰的...

    java操作properties属性文件jp.gr.java_conf.ussiy.app.propedit_5.3.3.jar,有例子

    `jp.gr.java_conf.ussiy.app.propedit_5.3.3.jar` 是一个专门用于编辑和管理Properties文件的工具,这使得开发者可以更加便捷地处理这类文件。下面将详细介绍如何在Java中操作Properties文件,并结合`propedit`工具...

    redis.conf配置及说明

    ### Redis配置文件详解 #### 基本设置 1. **内存单位定义**:Redis配置文件支持使用常见的单位表示内存大小。例如: - `1k` 表示 `1000 bytes` - `1kb` 表示 `1024 bytes` - `1m` 表示 `1000000 bytes` - `1mb...

    Python库 | genie.conf-19.11.1b0-cp37-cp37m-manylinux1_i686.whl

    通常,这样的库会提供一种结构化的方式来处理应用配置,可能包括读取、写入配置文件,以及定义和验证配置选项等。 在Python生态系统中,使用`pip`工具可以方便地安装`.whl`文件。用户只需在命令行中输入`pip ...

    Windows平台,Nginx配置文件修改自动加载重启

    4. **自动加载与重启**:`nginx-conf-watcher`会在检测到配置文件变化时,自动执行`nginx -s reload`命令,从而实现配置的实时加载。如果加载失败,通常是因为配置文件有语法错误,此时`nginx-conf-watcher`可能会...

    php-fpm.conf配置文件中文说明详解及重要参数说明

    例如:include=/opt/remi/php56/root/etc/php-fpm.d/*.conf,表示加载/opt/remi/php56/root/etc/php-fpm.d目录下所有.conf文件。 2. pid:指定master进程的pid文件路径,例如pid=/opt/remi/...

Global site tag (gtag.js) - Google Analytics