1、生成日志文件(有新数据产生时,将新的数据另起一行追加到日志文件中)
public void wirte(){
backup();
List<String> alTag_Real2 = new ArrayList<String>();
List<String> alVal_Real2 = new ArrayList<String>();
List<String> alTime_Real2 = new ArrayList<String>();
StringBuffer sql = new StringBuffer(
"select xxx from xxx where xxx and tag_name in (");
for (String tagName : tagNameList2) {
sql.append("'");
sql.append(tagName);
sql.append("',");
}
String sqlend2 = sql.substring(0, sql.length() - 1);
sqlend2 = sqlend2 + ")";
List<Mini_List> resList = new ArrayList<Mini_List>();
try {
Connection conn = DBUtils.feachConnection();
Statement statement = conn.createStatement();
ResultSet resultSet = statement.executeQuery(sqlend2);
resList = new ArrayList<Mini_List>();
while (resultSet.next()) {
Mini_List mini_List3 = new Mini_List();
mini_List3.setName(resultSet.getString(1));
mini_List3.setIp_input_value(resultSet.getString(2));
mini_List3.setIp_input_time(resultSet.getString(3));
resList.add(mini_List3);
}
} catch (Exception e) {
e.printStackTrace();
}
for (Mini_List mini_List3 : resList) {
String name = mini_List3.getName();
mini_List3Time:"+mini_List3.getIp_input_time());
//上次时间为空 或者 当前位点数据的时间与上次时间不同
if (null == htLastTime2.get(name)
|| !htLastTime2.get(name).toString().equals(
mini_List3.getIp_input_time().toString())) {
htLastTime2.put(name,mini_List3.getIp_input_time());
Double value = mini_List3.getIp_input_value() == "" ? Double.NaN : Double.parseDouble(mini_List3.getIp_input_value());
if (!Double.isNaN(value)){
//实时数据列表增加数据
alTag_Real2.add(name);
alVal_Real2.add(mini_List3.getIp_input_value());
alTime_Real2.add(mini_List3.getIp_input_time());
}
}
}
for (int i = 0; i < alTag_Real2.size()-1; i++) {
if(!new File(path).exists()){
new File(path).mkdirs();
}
File file = new File(path+alTag_Real2.toArray()[i]+".txt");
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException e) {
logger.info("创建"+alTag_Real2.toArray()[i]+"点位文件失败");
}
}
try {
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file, true)));
writer.write(alTag_Real2.toArray()[i]+" "+alTime_Real2.toArray()[i]+" "+alVal_Real2.toArray()[i]+" "+"Good");
writer.newLine();
writer.flush();
} catch (FileNotFoundException e) {
logger.info("写入"+alTag_Real2.toArray()[i]+"点位文件失败");
} catch (IOException e) {
logger.info("写入"+alTag_Real2.toArray()[i]+"点位文件失败");
}
}
}
2、在每天的0点备份(备份数据超过15天后删除超出部分的数据)
public static void backup() {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String dateformat = sdf.format(date.getTime() - 24 * 60 * 60 * 1000);
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
if ((calendar.get(Calendar.HOUR) == 0) && (calendar.get(Calendar.MINUTE) == 0)) {
List<String> files = new ArrayList<String>();
List<String> dirFile = new ArrayList<String>();
List<String> toDel = new ArrayList<String>();
File dir = new File(path);
File[] allFile = dir.listFiles();
for (File name : allFile) {
if (name.isFile()) {
files.add(name.getName());
} else {
dirFile.add(name.getPath());
}
}
if (dirFile.size() > 15) {
int index = Integer.parseInt(dateformat);
for (int i = 16; i < dirFile.size()+2; i++){
String before = sdf.format(date.getTime() - i * 24 * 60 * 60 * 1000);
if (new File(path + "sj" + before).exists()) toDel.add(path + "sj" + before);
}
for (String file : toDel) {
File file2 = new File(file);
File[] listFiles = file2.listFiles();
if(listFiles.length>0){
for (File file3 : listFiles) {
file3.delete();
}
}
file2.delete();
}
}
File file4 = new File(path + "sj" + dateformat);
if(!file4.exists()){
file4.mkdirs();
for (String string : files) {
new File(path + string).renameTo(new File(path + "sj" + dateformat + "\\" + string));
}
}
}
}
3、主要代码之外部分
private static Hashtable<String,String> htLastTime2 = new Hashtable<String,String>();
private static String path;
static {
Properties prop = new Properties();
InputStream in = Object.class.getResourceAsStream("/file.properties");
try {
prop.load(in);
path = prop.getProperty("path").trim();
} catch (IOException e) {
e.printStackTrace();
}
}