經過一周的掙紮,目前天氣預報抓取解析插入數據庫的功能已經大致實現,附項目源碼
將中國天氣網近六天(因為有些城市提供的數據源隻有五天數據,所以我暫時取5天,程序裏依然是六天的標準)的天氣情況抓取,用JSON解析,存入數據庫,數據庫是兩張表,城市表和天氣表。程序可以運行,兩個表都能讀入數據,城市表大致讀入了423行數據,天氣表大致讀入了1800行數據。程序的缺點在於,暫時還沒寫注釋,麵向對象還未體現,沒有實現每天定時抓取的性能,需要人工每天手動運行程序抓取數據。。。。。
附源碼:
https://download.csdn.net/detail/opzoonzhuzhengke/3860118
剛才實現了一下定時抓取
不貼代碼了,大致看下這個例子,改吧改吧就行了
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class Tim { /** * @param args */ public static void main(String[] args) { Timer tt=new Timer(); TimerTaskMine tk=new TimerTaskMine(); System.out.println((new Date()).toString()); tt.schedule(tk, 1000*5, 1000*2);//第一次先等待5秒,以後每隔2秒走一次run方法。 // tt.schedule(tk, 1000*3);//等待3秒,然後隻執行1次。 } } class TimerTaskMine extends TimerTask{ int i=0; int kkk=0; @Override public void run() { i++;kkk++; // TODO Auto-generated method stub System.out.println((new Date()).toString()+"--i--"+i+"--kkk--"+kkk); try { Thread.sleep(1000*4);//這句代碼,把schedule(1,2,3)第3個參數覆蓋掉了, //這裏是4秒,即使你在schedule方法中這的是2秒也使用4秒 if(this.i==5){ this.cancel(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Timer類就像一個定時器,用於設置特定的時間或周期,來配合線程動作的執行,但是隻調用Timer無法執行線程動作,必須配合另一個類TimerTask的方法才能使用。從示例6-13中可以發現Timer類與Thread類很相近。
public Timer ()
創建一個新的timer對象。
Timer屬於計時器類,Time建立後,需要調用schedule()方法來執行計劃任務,計劃調度的方法有許多運用方式:
public void schedule (TimerTask task, long delay)
執行任務前先等待一段時間。task代表要執行的任務,delay代表需要等待的時間,單位為毫秒(1000毫秒為1秒)。
public void schedule (TimerTask task,Date time)
在指定的係統時間time之後開始執行任務。
public void schedule (TimerTask task,long delay,long period)
延遲一段時間後開始執行任務,任務按照設定的周期執行。傳入的參數:delay為延遲時間,period為周期時間,單位均為毫秒。
public void schedule(TimerTask task,Date firstTime,long period)
在指定的時間後開始執行任務,任務按照設定的周期執行。傳入的參數:firstTime為指定等待時間,period為周期時間,單位都是毫秒。
public void scheduleAtFixedRate (TimerTask task,long delay,long period)
執行任務內容後,等待delay時間,再按照period周期時間繼續執行任務,單位都是毫秒。
public void scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
先等待一段時間firstTime,再執行計劃任務,然後按照period周期時間繼續執行任務,單位都是毫秒。
public void cancel()
停止timer計時。
有了Timer的各項調用方法,還不能直接執行計劃任務,需要跟TimerTask類共同運用才能使計劃任務開始運行。TimerTask所包含的相關方法如下:
public void TimerTask ()
創建一個新的TimerTask對象。
public abstract void run()
運行計劃任務的工作內容。
public void cancel()
中止TimerTask類的執行流程,不再執行所調度的工作內容。
public void scheduleExcutionTime()
實際運行計劃任務所用的時間。
最後更新:2017-04-02 06:52:12