最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)從url路徑中下載pdf文檔到本地

 更新時間:2025年11月12日 09:55:38   作者:小二愛編程·  
這篇文章主要為大家詳細(xì)介紹了java實現(xiàn)從url路徑中下載pdf文檔到本地,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,有需要的小伙伴可以了解下

這篇文章主要為大家介紹了如何從指定的網(wǎng)絡(luò)URL下載PDF文件。主要通過HttpURLConnection建立連接,設(shè)置超時和User-Agent,讀取輸入流并將其寫入本地文件系統(tǒng)。以下是完整代碼:

package com.cellstrain.icell.util;


import java.io.*;
import java.net.*;

public class DownloadPdf {

    /**
     * 從網(wǎng)絡(luò)Url中下載文件
     * @param urlStr
     * @param fileName
     * @param savePath
     * @throws IOException
     */
    public static void  downLoadByUrl(String urlStr,String fileName,String savePath) throws IOException{
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();
        //設(shè)置超時間為3秒
        conn.setConnectTimeout(5*1000);
        //防止屏蔽程序抓取而返回403錯誤
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        //得到輸入流
        InputStream inputStream = conn.getInputStream();
        //獲取自己數(shù)組
        byte[] getData = readInputStream(inputStream);
        //文件保存位置
        File saveDir = new File(savePath);
        if(!saveDir.exists()){
            saveDir.mkdir();
        }
        File file = new File(saveDir+File.separator+fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        if(fos!=null){
            fos.close();
        }
        if(inputStream!=null){
            inputStream.close();
        }
        System.out.println("info:"+url+" download success");

    }


    /**
     * 從輸入流中獲取字節(jié)數(shù)組
     * @param inputStream
     * @return
     * @throws IOException
     */
    public static  byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();
    }

    public static void main(String[] args) {
        try{
            downLoadByUrl("https://www.mybiosource.com/images/tds/protocol_samples/MBS700_Antibody_Set_Sandwich_ELISA_Protocol.pdf",
                    "ELISA.pdf","E:/upload/protocol");
        }catch (Exception e) {
            // TODO: handle exception
        }
    }
}

方法補充

1.java實現(xiàn)從url路徑中下載pdf文檔到本地

在開始之前,確保你的計算機上安裝了Java開發(fā)環(huán)境(JDK)。建議使用Java 8及以上版本。你可以使用任何開發(fā)工具,例如Eclipse、IntelliJ IDEA或簡單的文本編輯器。

下載PDF文檔的步驟

下載PDF文檔的步驟如下:

  • 確定PDF文件的URL。
  • 創(chuàng)建一個HTTP連接,向該URL發(fā)送請求。
  • 讀取響應(yīng)內(nèi)容。
  • 將內(nèi)容寫入本地文件。

代碼示例

下面是一個簡單的Java代碼示例,演示了如何從URL路徑下載PDF文檔到本地。

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class PdfDownloader {
    
    public static void downloadPdf(String pdfUrl, String destinationFile) {
        try {
            URL url = new URL(pdfUrl);
            HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
            httpURLConnection.setRequestMethod("GET");
            httpURLConnection.setDoOutput(true);
            
            int responseCode = httpURLConnection.getResponseCode();
            if (responseCode == HttpURLConnection.HTTP_OK) { // 200 status code
                InputStream inputStream = new BufferedInputStream(httpURLConnection.getInputStream());
                FileOutputStream fileOutputStream = new FileOutputStream(destinationFile);
                
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = inputStream.read(buffer)) != -1) {
                    fileOutputStream.write(buffer, 0, bytesRead);
                }
                
                fileOutputStream.close();
                inputStream.close();
                System.out.println("PDF downloaded successfully: " + destinationFile);
            } else {
                System.out.println("Failed to download PDF, response code: " + responseCode);
            }
            httpURLConnection.disconnect();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        String pdfUrl = " // 替換為實際PDF鏈接
        String destinationFile = "downloaded.pdf"; // 目標(biāo)文件名
        downloadPdf(pdfUrl, destinationFile);
    }
}

代碼詳解

  • 導(dǎo)入必要的類:我們需要使用URLConnection和InputStream等類來處理網(wǎng)絡(luò)連接和讀取數(shù)據(jù)。
  • 下載函數(shù):downloadPdf函數(shù)接受PDF文件的URL和本地文件路徑作為參數(shù),使用HttpURLConnection類創(chuàng)建HTTP連接。
  • 讀取和寫入數(shù)據(jù):成功連接后,通過輸入流讀取PDF數(shù)據(jù),并通過輸出流將其寫入本地文件。
  • 異常處理:使用try-catch語句處理可能出現(xiàn)的IOException異常。

2.Java根據(jù)URL下載文件到本地的2種方式(大型文件與小型文件)

a.小型文件推薦使用

代碼解析

  • 首先創(chuàng)建了一個URL對象website,用來表示遠程文件的地址。
  • 然后創(chuàng)建了一個ReadableByteChannel對象rbc和一個FileOutputStream對象fos。ReadableByteChannel用于讀取遠程文件的字節(jié)流,F(xiàn)ileOutputStream用于將讀取的內(nèi)容寫入本地文件。
  • 在try塊中,通過URL對象打開一個連接并獲取其字節(jié)流,然后使用transferFrom方法將遠程文件的內(nèi)容直接傳輸?shù)奖镜匚募?。這是NIO的一種高效的文件傳輸方式。
  • 如果在上述過程中發(fā)生異常,將會捕獲并打印異常信息。
  • 無論是否發(fā)生異常,最后都會執(zhí)行finally塊中的清理工作,關(guān)閉文件輸出流和遠程字節(jié)流通道,以釋放資源。

實現(xiàn)代碼

public static void downloadFile(String remoteFilePath, String localFilePath) {
        URL website = null;
        ReadableByteChannel rbc = null;
        FileOutputStream fos = null;
        try {
            website = new URL(remoteFilePath);
            rbc = Channels.newChannel(website.openStream());
            fos = new FileOutputStream(localFilePath);//本地要存儲的文件地址 例如:test.txt
            fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(fos!=null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if(rbc!=null){
                try {
                    rbc.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
 
            }
        }
    }

b.大型文件推薦使用

代碼解析

  • 首先創(chuàng)建了一個URL對象url,用來表示要下載文件的地址。
  • 使用URL對象打開一個連接,并將其強制轉(zhuǎn)換為HttpURLConnection對象。HttpURLConnection是Java提供的用于發(fā)送HTTP請求和接收HTTP響應(yīng)的類。
  • 通過連接獲取輸入流 inputStream,使用BufferedInputStream對輸入流進行緩存。這是為了避免一次性讀取大文件造成內(nèi)存溢出。
  • 創(chuàng)建一個File對象 file,表示要保存的本地文件。如果該文件已存在,則刪除之。
  • 創(chuàng)建一個輸出流 outputStream,將文件作為輸出目標(biāo)。
  • 創(chuàng)建一個字節(jié)數(shù)組 buffer,大小為5MB(1024 * 1024 * 5),用于緩存每次從輸入流中讀取的數(shù)據(jù)。
  • 使用 while 循環(huán),不斷從輸入流中讀取數(shù)據(jù)到緩沖區(qū),然后將緩沖區(qū)的內(nèi)容寫入輸出流。循環(huán)會一直進行,直到輸入流的末尾。
  • 關(guān)閉連接 connection,并在 finally 塊中關(guān)閉輸入流和輸出流。使用 IOUtils.closeQuietly 方法可以安全地關(guān)閉流,即使發(fā)生異常也不會拋出異常。
  • 總的來說,這段代碼實現(xiàn)了從指定URL下載文件到本地的功能,并且通過緩存流和分塊讀取的方式,避免了一次性讀取大文件導(dǎo)致的內(nèi)存溢出問題。同時,在下載完成或出現(xiàn)異常后,也進行了資源的關(guān)閉和釋放操作。

實現(xiàn)代碼

public static void downloadFile1(String downloadUrl, String path){
        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            URL url = new URL(downloadUrl);
            //這里沒有使用 封裝后的ResponseEntity 就是也是因為這里不適合一次性的拿到結(jié)果,放不下content,會造成內(nèi)存溢出
            HttpURLConnection connection =(HttpURLConnection) url.openConnection();
 
            //使用bufferedInputStream 緩存流的方式來獲取下載文件,不然大文件會出現(xiàn)內(nèi)存溢出的情況
            inputStream = new BufferedInputStream(connection.getInputStream());
            File file = new File(path);
            if (file.exists()) {
                file.delete();
            }
            outputStream = new FileOutputStream(file);
            //這里也很關(guān)鍵每次讀取的大小為5M 不一次性讀取完
            byte[] buffer = new byte[1024 * 1024 * 5];// 5MB
            int len = 0;
            while ((len = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, len);
            }
            connection.disconnect();
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            IOUtils.closeQuietly(outputStream);
            IOUtils.closeQuietly(inputStream);
        }
    }

到此這篇關(guān)于java實現(xiàn)從url路徑中下載pdf文檔到本地的文章就介紹到這了,更多相關(guān)java url下載pdf內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java反射機制用法總結(jié)

    Java反射機制用法總結(jié)

    反射機制是在運行狀態(tài)中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調(diào)用它的任意一個方法和屬性;這種動態(tài)獲取的信息以及動態(tài)調(diào)用對象的方法的功能稱為java語言的反射機制。下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • windows系統(tǒng)上如何進行maven安裝和配置方式

    windows系統(tǒng)上如何進行maven安裝和配置方式

    這篇文章主要介紹了windows系統(tǒng)上如何進行maven安裝和配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • 解決@PathVariable出現(xiàn)點號.時導(dǎo)致路徑參數(shù)截斷獲取不全的問題

    解決@PathVariable出現(xiàn)點號.時導(dǎo)致路徑參數(shù)截斷獲取不全的問題

    這篇文章主要介紹了解決@PathVariable出現(xiàn)點號.時導(dǎo)致路徑參數(shù)截斷獲取不全的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JAVA中string數(shù)據(jù)類型轉(zhuǎn)換詳解

    JAVA中string數(shù)據(jù)類型轉(zhuǎn)換詳解

    在JAVA中string是final類,提供字符串不可以修改,string類型在項目中經(jīng)常使用,下面給大家介紹了string七種數(shù)據(jù)類型轉(zhuǎn)換,需要的朋友可以參考下
    2015-07-07
  • SpringBoot配置文件密碼加密與解密的操作代碼

    SpringBoot配置文件密碼加密與解密的操作代碼

    我們在SpringBoot項目當(dāng)中,會把數(shù)據(jù)庫的用戶名密碼等配置直接放在yaml或者properties文件中,這樣維護數(shù)據(jù)庫的密碼等敏感信息顯然是有一定風(fēng)險的,所以我們需要給密碼加解密,本文給大家介紹了SpringBoot配置文件密碼加密與解密的操作代碼,需要的朋友可以參考下
    2024-12-12
  • SpringMVC底層執(zhí)行流程及原理解析

    SpringMVC底層執(zhí)行流程及原理解析

    這篇文章主要介紹了SpringMVC底層執(zhí)行流程及原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Java實現(xiàn)斗地主小游戲

    Java實現(xiàn)斗地主小游戲

    這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)斗地主小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Java8使用stream實現(xiàn)list中對象屬性的合并(去重并求和)

    Java8使用stream實現(xiàn)list中對象屬性的合并(去重并求和)

    這篇文章主要介紹了Java8使用stream實現(xiàn)list中對象屬性的合并(去重并求和),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例講解

    Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例講解

    這篇文章主要介紹了Java模擬單鏈表和雙端鏈表數(shù)據(jù)結(jié)構(gòu)的實例,注意這里的雙端鏈表不是雙向鏈表,是在單鏈表的基礎(chǔ)上保存有對最后一個鏈接點的引用,需要的朋友可以參考下
    2016-04-04
  • Spring中的動態(tài)數(shù)據(jù)源解讀

    Spring中的動態(tài)數(shù)據(jù)源解讀

    這篇文章主要介紹了關(guān)于Spring中的動態(tài)數(shù)據(jù)源解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評論

三门峡市| 凤台县| 灵璧县| 隆化县| 久治县| 天津市| 郧西县| 清新县| 年辖:市辖区| 抚远县| 大余县| 邻水| 赫章县| 璧山县| 县级市| 云梦县| 上栗县| 文成县| 达拉特旗| 滕州市| 汤阴县| 正阳县| 吴江市| 玛纳斯县| 项城市| 溧阳市| 高雄县| 福海县| 自贡市| 绥棱县| 沁源县| 元谋县| 永泰县| 定西市| 枣庄市| 宜川县| 汝阳县| 乌鲁木齐县| 大兴区| 蒙自县| 西藏|