下载 Java 文件

Rupam Yadav 2023年10月12日
  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 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()。因为它需要三个参数,第一个和第二个是 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);
    }
  }
}
作者: 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