import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.*;
public class ReadFile {
/**
*
* @param file 文件
* @param position 已经读了的字节数
*/
public static List getLastedLog(File file, long position) {
Map<String, List> data = new HashMap<>();
List list = new LinkedList<>();
String value = PropertiesUtil.getValue(FileConstants.METRIC_FILE_NAME, “key”);
String[] infos = value.split(",");
List columns = new ArrayList<>();
for(String info: infos) {
columns.add(info.split(": ")[0]);
}
int count =0;
if(file.exists()) {
RandomAccessFile randomFile = null;
try {
randomFile = new RandomAccessFile(file, “r”);
long length = randomFile.length();
if(length == 0L)
return list;
//游标移动到上次读取的位置
randomFile.seek(position);
String tmp = "";
while( (tmp = randomFile.readLine())!= null) {
try {
//cvs格式文件第一行的格式 t,value格式
if(tmp.contains("t,value"))
continue;
if(containWanted(columns, tmp)) { //如果得到的是配置文件中想要的信息
list.add(tmp);
}
// if(tmp.contains(LogConstants.FLAG_SNMP)){ //snmp信息
// snmp.add(tmp); //处理日志的逻辑
// }else if(tmp.contains(LogConstants.FLAG_PROCESS)){
// process.add(tmp);
// }
}catch (Exception e) {
System.out.println("最新日志数量较大,内存不足。");
break;
}
position += (tmp.length() + 2); //加2 是\r\n的字节数
}
} catch (IOException e) {
e.printStackTrace();
}
}
ReadByteCounter.getInstance().setLineNum(position);
return list;
}
private static boolean containWanted(List wanted, String line) {
boolean flag = false;
for(int i=0; i < wanted.size(); i++) {
if(line.contains(wanted.get(i))) {
flag = true;
break;
}
}
return flag;
}