java使用TimerTask定时器获取指定网络数据


在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`块中捕获了所有异常,并打印堆栈跟踪以便于调试。

- 在实际生产环境中,你可能需要更复杂的错误处理和日志记录机制。