下载 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