最近有個小項目讓我實作每天自動生成封包,然後一個财務系統通過FTP可以到我指定的目錄下取檔案,還實作一個檔案不要超過10M等功能,我用了分批處理,但是目前定時的還點問題,貼下代碼,哪位同仁有時間幫忙看下
如果解決了,會貼出代碼來共享
部分分批處理代碼
======================================
while (rs.next()) {
sb.append(rs.getString(1)).append("|");
sb.append(rs.getString(2)).append("|");
sb.append(rs.getString(3)).append("|");
sb.append(rs.getString(4)).append("|");
sb.append(rs.getString(5)).append("|");
sb.append(rs.getString(6)).append("|");
sb.append(rs.getString(7)).append("|");
sb.append(rs.getString(8)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(9)).append("|");
sb.append(rs.getString(10)).append("|");
sb.append(rs.getString(11)).append("|");
sb.append("/n");
count++;
if (count % 80000 == 0) { //每次批量插入80000條換一個檔案夾
page++;
if (Integer.toString(page).length() != 2) { //數字補零
sb2.append("sjwj_").append(sdate).append("_0").append(page);
}
else {
sb2.append("sjwj_").append(sdate).append("_").append(page);
}
sb1.append("d://bankmessagedemo//").append(sb2.toString()).append(".txt");
BufferedWriter out = new BufferedWriter(new FileWriter(sb1.toString(), true));
out.write(sb.toString());
sb.delete(0, sb.length()); //每次先清空一次資料緩存
sb1.delete(0, sb1.length()); //每次先清空一次封包路徑指向緩存
sb2.delete(0, sb2.length()); //每次先清空一次封包頭緩存
out.flush();
returnPage(page); //傳回page供下面使用,如果沒有到80000條,直接需要從1開始
}
}
page = returnPage(page); //得到傳回page值
if (Integer.toString(page).length() != 2) { //數字補零(兩種情況,1種COUNG出來的記錄數沒有80000條,2種是零頭)
if (page == 0) {
sb2.append("sjwj_").append(sdate).append("_0").append(1);
}
else {
sb2.append("sjwj_").append(sdate).append("_0").append(page+1);
}
}
else {
sb2.append("sjwj_").append(sdate).append("_").append(page+1);
}
sb1.append("d://bankmessagedemo//").append(sb2.toString()).append(".txt");
BufferedWriter out = new BufferedWriter(new FileWriter(sb1.toString(), true));
out.write(sb.toString());
sb1.delete(0, sb1.length()); //每次先清空一次封包路徑指向緩存
sb2.delete(0, sb2.length()); //每次先清空一次封包頭緩存
out.flush();
======================================
有沒有更好的方法優化?我總覺得我的這個做法很啰嗦
定時器
======================================
package tf.dt.credit.view;
import java.util.Calendar;
import java.util.Date;
import java.util.TimerTask;
import java.util.Timer;
import tf.dt.credit.view.CreditMessageView;
import tf.dt.credit.database.odbcConnection;
public class TimeManageMessage {
public static void main(String[] args) throws InterruptedException {
// Get the Date corresponding to 11:01:00 pm today.
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 5); //控制時
calendar.set(Calendar.MINUTE, 1); //控制分
calendar.set(Calendar.SECOND, 0); //控制秒
Date time = calendar.getTime();
Timer timer = new Timer();
// timer.schedule(new TimeManageMessage.myrun(), time);
int i = 0;
while (true) {
// Thread.sleep(10000l);
i++;
timer.schedule(new TimeManageMessage.myrun(), time);
}
}
static class myrun extends TimerTask {
odbcConnection oc = new odbcConnection();
String date = oc.getLastDate(); //得到UC賬務日期
public void run() {
CreditMessageView vmc = new CreditMessageView();
int oneMessage = vmc.oneMessage("", "1", date); //會計憑證資訊檔案
if (oneMessage != 1) {
System.out.println("dingting:XKJ表中當天記錄為空......");
}
else {
System.out.println("dingting:執行成功--會計憑證資訊檔案......");
}
int twoMessage = vmc.twoMessage("", "1", date); //匯率資訊檔案
if (twoMessage != 1) {
System.out.println("dingting:UX表中記錄為空.....");
}
else {
System.out.println("dingting:執行成功--匯率資訊檔案.....");
}
int threeMessage = vmc.threeMessage("", "1", date); //全科目餘額對賬檔案
if (threeMessage != 1) {
System.out.println("dingting:XKJZD表中當天記錄為空......");
}
else {
System.out.println("dingting:執行成功--全科目餘額對賬檔案......");
}
}
}
}
======================================
這個定時器的程式目前還是有點問題,有心人幫忙看看哪裡出的問題哈