该代码是用来寻找规定时间内给定测点的值其中需求的 测点在文件AimPointList.txt;所有的的测点都对应一个文件,每个文件里包括时间和对应的值。
要求:
给定需要的时间,将需要的测点放在一个文件里,将结果保存成一个文件。
思路:
1.读取目标测点文件,保存在集合里;
2,遍历集合,找对应测点的文件
3,根据对应时间,找出时间相等,或上一个时间点和下一个时间点的对应值的平均值
4,将结果输出到文本import java.io.BufferedReader;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileFilter;
import java.io.FileReader;
import java.io.FileWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
public class insertmethod {
public static File file2 = new File("G:\\FindPointBytime\\FindPointBytile\\result.txt");
public static File allCeName = new File("G:\\FindPointBytime\\FindPointBytile\\Float32_7#.txt"); //所有测点的文件
public static File needCeName = new File("G:\\FindPointBytime\\FindPointBytile\\AimPointList.txt"); // 有需要测点的文件
static int countFiles = 0;// 声明统计文件个数的变量
static int countFolders = 0;// 声明统计文件夹的变量
public static DateFormat dateFormat= new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
@SuppressWarnings("deprecation")
public static Date dataneed =new Date("2015/12/1 23:59:10");
public static Date data;
public static long a;
public static double dob;
public static ArrayList<String>aimlist;
public static ArrayList<Long>list;
public static ArrayList<Double>str;
public static String[] stringname={};
public static int j=0;
public static double k=0;
public static File[] searchFile(File folder, final String keyWord) {// 递归查找包含关键字的文件
File[] subFolders = folder.listFiles(new FileFilter() {// 运用内部匿名类获得文件
public boolean accept(File pathname) {// 实现FileFilter类的accept方法
if (pathname.isFile())// 如果是文件
countFiles++;
else
// 如果是目录
countFolders++;
if (pathname.isDirectory()
|| (pathname.isFile() && pathname.getName().toLowerCase().contains(keyWord.toLowerCase())))// 目录或文件包含关键字
return true;
return false;
}
});
List<File> result = new ArrayList<File>();// 声明一个集合
for (int i = 0; i < subFolders.length; i++) {// 循环显示文件夹或文件
if (subFolders[i].isFile()) {// 如果是文件则将文件添加到结果列表中
result.add(subFolders[i]);
} else {// 如果是文件夹,则递归调用本方法,然后把所有的文件加到结果列表中
File[] foldResult = searchFile(subFolders[i], keyWord);
for (int j = 0; j < foldResult.length; j++) {// 循环显示文件
result.add(foldResult[j]);// 文件保存到集合中
}
}
}
File files[] = new File[result.size()];// 声明文件数组,长度为集合的长度
result.toArray(files);// 集合数组化
return files;
}
public static String timeFind(File src) throws Exception {
long diff=0;
list=new ArrayList<Long>();
str=new ArrayList<Double>();
BufferedReader bReader = new BufferedReader(new FileReader(src));
for (String line = bReader.readLine();line!= null;line = bReader.readLine()) {//读取每一行
if (line.hashCode() !=0 ) {
String[] sssString = line.split("\t");
Date date1=dateFormat.parse(sssString[0]);
String aString=sssString[1];
if(aString.endsWith("System.__ComObject"))
{aString="0";}
double ad=Double.parseDouble(aString);
diff = date1.getTime() - dataneed.getTime();
if((a<0&&diff>0)||(diff==0)){
k=((dob+ad)/2);
System.out.println("result is:**"+((dob+ad)/2)+"***");
}
a=diff;
dob=ad;
}
}
String kkString=Double.toString(k);
return kkString;
}
public static void main(String[] args) throws Exception {
File folder = new File("G:\\FindPointBytime\\FindPointBytile\\pointValueFile");// 默认目录
aimlist=new ArrayList<String>();
//寻找测点
BufferedReader bReader = new BufferedReader(new FileReader(needCeName));
for (String line = bReader.readLine();line!= null;line = bReader.readLine()) { //读取每一行
if (line.hashCode() !=0 ) {
String[] sssString = line.split("\t");
String aim=sssString[0];
aimlist.add(aim);
}
}
//提取出需要检测文件的绝对路径
String strname = "";
Iterator<String> iterator = aimlist.iterator();
BufferedWriter bwWriter=new BufferedWriter(new FileWriter(file2));
while(iterator.hasNext()){
String keyword = iterator.next();
strname=keyword;
bwWriter.write(strname+"\t");
bwWriter.flush();
if (!folder.exists()) {// 如果文件夹不存在
System.out.println("目录不存在:" + folder.getAbsolutePath());
return;
}
File[] result = searchFile(folder, keyword);// 调用方法获得文件数组
for (int i = 0; i < result.length; i++) {// 循环显示文件
File file = result[i];
String kk=timeFind(new File(file.getAbsolutePath()));
bwWriter.write(kk+"\t");bwWriter.newLine();
System.out.println("---------------------------------");
}
}
bwWriter.flush();//end for
bwWriter.close();
}
}