首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 使用 HttpURLConnection 下載圖片完整實戰

     編輯:Java 綜合教學

核心思路

利用 URL 和 HttpURLConnection 發起 GET 請求獲取圖片輸入流,再通過緩衝流高效寫入本地文件。

工具類封裝

public class HttpURLConnectionUtil {
    /** 發送 GET 請求獲取輸入流 */
    public static InputStream getInputStreamByGet(String urlStr) {
        try {
            HttpURLConnection conn = (HttpURLConnection) new URL(urlStr).openConnection();
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                return conn.getInputStream();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    /** 將輸入流保存到文件 */
    public static void saveData(InputStream is, File destFile) {
        try (BufferedInputStream bis = new BufferedInputStream(is);
             BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile))) {
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bis.read(buffer)) != -1) {
                bos.write(buffer, 0, len);
            }
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

測試類:下載指定圖片

public class Test {
    public static void main(String[] args) {
        String imgUrl = "https://img.coocaa.com/www/attachment/forum/201602/16/085938u86ewu4l8z6flr6w.jpg";
        
        // 從 URL 提取文件名
        String fileName = imgUrl.substring(imgUrl.lastIndexOf('/') + 1);
        File destFile = new File("f:/", fileName); // 保存至 F 盤
        
        InputStream is = HttpURLConnectionUtil.getInputStreamByGet(imgUrl);
        if (is != null) {
            HttpURLConnectionUtil.saveData(is, destFile);
            System.out.println("下載完成:" + destFile.getAbsolutePath());
        } else {
            System.err.println("下載失敗:無法獲取輸入流");
        }
    }
}

關鍵點說明

  1. 緩衝流提升性能:BufferedInputStream/OutputStream 減少系統調用次數。
  2. 異常處理與資源關閉:使用 try-with-resources 確保流關閉。
  3. 文件名提取:簡單截取 URL 最後一段,實際項目建議從 Content-Disposition 頭或生成 UUID 命名。
  4. 大文件考慮:超大文件建議斷點續傳或使用 NIO (FileChannel) 提升吞吐。

擴展:URL 類其他用法

  • url.openStream():快捷獲取輸入流,等價於 url.openConnection().getInputStream()。
  • URLClassLoader:動態加載遠程 JAR/類文件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved