下載 Java 檔案

Rupam Yadav 2023年1月30日 2021年6月30日
  1. 使用 Java 中的 java.nio 包下載檔案
  2. 在 Java 中使用 FileUtils.copyURLToFile() 下載檔案
  3. 在 Java 中使用 Files.copy() 下載檔案
下載 Java 檔案

本文教我們如何使用各種方法下載 Java 檔案。下面,我們將看到在 Java 中下載檔案的四種方法。我們的主要重點只是從我們將在示例中使用的 URL 下載檔案。

使用 Java 中的 java.nio 包下載檔案

本教程中的第一個示例使用 java.nio 包,它只是 Java 傳統 java.io 的改進和高階替代品。nio 部分代表 New Input/Output,表示它比以前的包具有更好的功能。java.nio 提供了我們可以使用的新網路方法。

在以下程式碼中,首先,我們使用要下載檔案的 URL 建立一個 URL 物件 fetchWebsite。接下來,我們構建一個從 fetchWebsite 讀取流的通道,我們通過呼叫 Channels 類的 newChannel() 方法來實現這一點。為了建立一個流,我們從 fetchWebsite 呼叫 openStream()

現在,我們建立一個 FileOutputStream 物件 fos,它在本地建立一個具有指定名稱的檔案。最後,我們使用 transferFrom() 方法從線上資源中獲取檔案。此方法將資料從源傳輸到寫入 fosFileChanneltransferFrom() 接受三個引數,第一個是 readableByteChannel 物件,第二個是我們想要開始寫入檔案的位置,即第 0 個位置,最後是要傳輸的最大位元組數。

import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URL;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

public class DownloadFile {
    public static void main(String[] args) throws IOException {

        URL fetchWebsite = new URL("https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");
        ReadableByteChannel readableByteChannel = Channels.newChannel(fetchWebsite.openStream());

        try (FileOutputStream fos = new FileOutputStream("C:\\Users\\Downloads\\IntroToJava.pdf")) {
            fos.getChannel().transferFrom(readableByteChannel, 0, Long.MAX_VALUE);
        }
    }
}

在 Java 中使用 FileUtils.copyURLToFile() 下載檔案

從線上資源下載檔案的下一個最佳方法是使用 Apache Commons-IO 庫中包含的 FileUtils.copyUrlToFile() 方法。

我們使用以下程式碼在專案中包含依賴項。

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-io</artifactId>
    <version>1.3.2</version>
</dependency>

下面,我們建立一個帶有線上檔案​​資源連結的 URL 物件。接下來,我們建立一個本地檔案,下載的檔案可以在其中駐留。為此,我們建立了一個 File 類的物件,並將帶有副檔名的檔名傳遞給它的建構函式。

最後,我們從 FileUtils 類呼叫 copyURLToFile() 方法,該方法有兩個引數:URL 物件和 file 物件。

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.IOException;
import java.net.URL;

public class DownloadFile {
    public static void main(String[] args) throws IOException {

        URL fetchWebsite = new URL("https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");

        File file = new File("JavaIo.pdf");

        FileUtils.copyURLToFile(fetchWebsite, file);

    }
}

在 Java 中使用 Files.copy() 下載檔案

就像第一個例子一樣,我們使用 java.nio 包,但呼叫不同的方法。copy()Files 類的一個方法。顧名思義,它將檔案複製到指定的目標。

在程式碼中,我們有一個指向檔案源的 URL 物件 fetchWebsite。我們建立了一個 Path 物件,它告訴目標我們要將檔案複製到哪裡。接下來,我們開啟一個流以從線上資源中獲取位元組並將 inputSteam 傳遞給 copy()。因為它需要三個引數,第一個和第二個是 inputStreampath 物件,而第三個指定 CopyOption 或執行復制操作的方式。我們使用 StandardCopyOption.REPLACE_EXISTING 來替換已經存在的檔案。

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class DownloadFile {
    public static void main(String[] args) throws IOException {

        URL fetchWebsite = new URL("https://theswissbay.ch/pdf/Gentoomen%20Library/Programming/Java/Introduction%20to%20Java%20IO.pdf");

        Path path = Paths.get("JavaIO.pdf");
        try (InputStream inputStream = fetchWebsite.openStream()) {
            Files.copy(inputStream, path, StandardCopyOption.REPLACE_EXISTING);
        }
    }
}
Author: Rupam Yadav
Rupam Yadav avatar Rupam Yadav avatar

Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.

LinkedIn