在Java中,使用`TimerTask`结合`Timer`类可以方便地实现定时任务。但需要注意的是,`TimerTask`本身并不直接支持网络操作,因为它主要用于在后台线程中执行定时任务。对于网络数据的获取,我们通常需要使用Java的网络编程接口,如`HttpURLConnection`、`HttpClient`(Java 11及以上)等。
以下是一个使用`TimerTask`和`HttpURLConnection`来获取指定网络数据的示例代码:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Timer;
import java.util.TimerTask;
public class NetworkDataFetcher extends TimerTask {
private String url;
public NetworkDataFetcher(String url) {
this.url = url;
}
@Override
public void run() {
try {
URL myUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) myUrl.openConnection();
connection.setRequestMethod("GET");
int responseCode = connection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String inputLine;
StringBuilder response = new StringBuilder();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
// 在这里处理或输出获取到的数据
System.out.println(response.toString());
} else {
System.out.println("GET request not worked");
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
String url = "http://example.com/data"; // 修改为你的目标URL
Timer timer = new Timer();
TimerTask task = new NetworkDataFetcher(url);
// 设定任务执行的延迟时间(毫秒)和周期执行的时间间隔(毫秒),这里设置为每10秒执行一次
timer.scheduleAtFixedRate(task, 0, 10000);
}
}
注意:
- 请替换`http://example.com/data`为你需要获取数据的实际URL。
- 上述代码使用了`HttpURLConnection`来发送GET请求并获取响应。
- 使用`Timer`的`scheduleAtFixedRate`方法来安排任务按照指定的延迟时间和固定的时间间隔重复执行。
- 网络请求可能会抛出多种异常,因此在`try-catch`块中捕获了所有异常,并打印堆栈跟踪以便于调试。
- 在实际生产环境中,你可能需要更复杂的错误处理和日志记录机制。