下載 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()
方法從線上資源中獲取檔案。此方法將資料從源傳輸到寫入 fos
的 FileChannel
。transferFrom()
接受三個引數,第一個是 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 java.io.File;
import java.io.IOException;
import java.net.URL;
import org.apache.commons.io.FileUtils;
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()
。因為它需要三個引數,第一個和第二個是 inputStream
和 path
物件,而第三個指定 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);
}
}
}
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