package com.util;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.math.BigInteger;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;
/**
* 读取txt文件
* @author ccj
*
*/
public class RefreshReadTextFile {
//private static List<String> fileInfo = null;
private static Map<String,List<String>> cacheMap = new HashMap<String,List<String>>();//文件信息读取
private static Map<String,Long> lastModifyTimeMap = new HashMap<String,Long>();
private static long timeOut = 10*60*1000; //每10分钟更新一次
/**
* 读取文件内信息
* @param file
* @return http://www.javalearns.com/
* @throws IOException
*/
public static List<String> read(String file) throws IOException{
//每隔10分钟进行一次文件信息更新读取
List<String> fileInfo = cacheMap.get(file);
Long lastModifyTime = StringUtils.getNotNullLong1(lastModifyTimeMap.get(file));
BigInteger b1 = new BigInteger(System.currentTimeMillis()+"");
BigInteger b2 = new BigInteger(StringUtils.getNotNullLong(lastModifyTime)+"");
BigInteger b3 = b1.subtract(b2);
//System.out.println("b3="+b3+",timeout="+timeOut); http://www.javalearns.com/
if(fileInfo==null || lastModifyTime==null || lastModifyTime==0 || b3.longValue()>timeOut){
fileInfo = new Vector<String>();
File f = new File(file);
//如果文件不能正常读取,返回空的List
if(!f.exists() || !f.isFile() || !f.canRead()){
return fileInfo;
}
BufferedReader br = new BufferedReader(new FileReader(f));
String s = null;
while((s=br.readLine())!=null){
if(!s.trim().equals("")){
fileInfo.add(s.trim());
}
}
cacheMap.put(file, fileInfo);
lastModifyTimeMap.put(file, System.currentTimeMillis());
}
return fileInfo;
}
public static void main(String[] args) throws IOException{
List<String> list = RefreshReadTextFile.read("E:\\work\\jtb\\workspace\\jtb_archive\\web\\WEB-INF\\config\\userList.txt");
for(String s : list){
System.out.println(s);
}
}
}