這個API相信大家都用過啦,不過還蠻實用的,被concurrency折磨了兩天,想換個輕鬆的,加上今天又有加班,沒啥時間研究fancy的API,廢話不多說,簡單說,就是先new一個Timer物件,再new一個TimerTask,要做的工作(例如報時)就寫在TimerTask的物件裡,然後再用Timer物件中的Schedule方法指定哪一項工作,多久後開始執行、每隔多久執行或是在特定時間執行,如果task很複雜可以創一個類別繼承TimerTask,如果簡單用匿名類別效果也相同,今天自己寫的code如下:
MyTimer
package timer;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimer {
public static void main(String[] args){
Timer timer= new Timer(); //建立一個Timer物件
TimerTask copy= new MyTask("copy"); //可以另創一個類別繼承TimerTask
timer.schedule(copy, 5000); //五秒後開始
System.out.println("Copy Start After 5 sec");
TimerTask showtime= new TimerTask(){//也可以用匿名類別的方式,
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println(new Date()); //輸出時間
}
};
timer.schedule(showtime, 1000, 5000);//一秒後開始,之後每過五秒再執行
//timer.schedule(xxx, Date);第二個參數是可以指定時間,什麼時候開始執行。
}
}
MyTask
package timer;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.Date;
import java.util.TimerTask;
public class MyTask extends TimerTask{
private String jobname; //可以根據傳入的字串決定做什麼工作
public MyTask(String jobname){
this.jobname=jobname;
}
@Override
public void run() {
// TODO Auto-generated method stub
// if(jobname.equals("xxx")){
// dosomething();
// }
if(jobname.equals("copy")){
Path seo=Paths.get(loc.seopath); //將路徑轉成Path物件
Path ge=Paths.get(loc.gepath);
Path des=Paths.get(loc.outseo);
Path des1=Paths.get(loc.outge);
try { //Files還有很多方法,創立檔案、目錄、更改屬性等等,詳官網API
Files.copy(ge, des1, StandardCopyOption.REPLACE_EXISTING);//檔案從A到B
Files.copy(seo, des, StandardCopyOption.REPLACE_EXISTING);//這個參數是直接覆蓋
} catch (IOException e) { //StandardCopyOption.ATOMIC_MOVE是指移動(或稱剪下)
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
System.out.println("Completed");
}
}
}
}
Output:
Copy Start After 5 sec
Tue Oct 30 22:01:38 CST 2012
Tue Oct 30 22:01:43 CST 2012
Completed
Tue Oct 30 22:01:48 CST 2012