0
点赞
收藏
分享

微信扫一扫

将文件下载到指定目录JAVA

将文件下载到指定目录的JAVA实现

在开发过程中,我们经常需要从网络上下载文件并保存到指定的目录。而Java提供了丰富的API和工具类来实现这个功能。本文将介绍如何使用Java下载文件并保存到指定目录。

使用Java的URL和HttpURLConnection类

Java的URL和HttpURLConnection类提供了简单的API来进行网络操作。我们可以使用它们来下载文件。

代码示例

首先,我们需要创建一个URL对象来表示要下载的文件的URL。然后,我们可以使用URL对象的openConnection方法创建一个HttpURLConnection对象。接下来,我们可以设置HTTP请求的一些属性,如请求方法、请求头等。最后,我们可以获取输入流来读取文件的内容,并将其写入到指定的文件中。

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class FileDownloader {
    public static void downloadFile(String fileUrl, String saveDir) throws IOException {
        URL url = new URL(fileUrl);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("GET");

        int responseCode = connection.getResponseCode();
        if (responseCode == HttpURLConnection.HTTP_OK) {
            String fileName = "";
            String disposition = connection.getHeaderField("Content-Disposition");
            String contentType = connection.getContentType();

            if (disposition != null) {
                int index = disposition.indexOf("filename=");
                if (index > 0) {
                    fileName = disposition.substring(index + 10, disposition.length() - 1);
                }
            } else {
                fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
            }

            InputStream inputStream = connection.getInputStream();
            String saveFilePath = saveDir + File.separator + fileName;

            FileOutputStream outputStream = new FileOutputStream(saveFilePath);

            int bytesRead;
            byte[] buffer = new byte[1024];
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }

            outputStream.close();
            inputStream.close();
            System.out.println("文件下载完成");
        } else {
            System.out.println("文件下载失败,错误码:" + responseCode);
        }
        connection.disconnect();
    }

    public static void main(String[] args) {
        try {
            FileDownloader.downloadFile(" "/path/to/save/directory");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释

在下载文件的过程中,我们首先获取HTTP响应的状态码,如果状态码为HTTP_OK(200),则表示请求成功。然后,我们根据响应头中的Content-Disposition字段获取文件名,如果不存在,则从URL中获取文件名。接下来,我们创建输入流来读取文件内容,并根据指定的目录和文件名创建输出流,将文件写入到指定的目录中。

最后,我们关闭输入流和输出流,并断开与服务器的连接。

使用Apache HttpClient库

Apache HttpClient是一个开源的Java库,提供了更高级的API来进行HTTP请求。它简化了HTTP请求的操作,包括下载文件。

Maven依赖

要使用Apache HttpClient库,需要在项目中添加以下Maven依赖:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.5.12</version>
</dependency>

代码示例

下面是使用Apache HttpClient库下载文件的示例代码:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.FileOutputStream;
import java.io.IOException;

public class FileDownloader {
    public static void downloadFile(String fileUrl, String saveDir) throws IOException {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(fileUrl);

        HttpResponse response = httpClient.execute(httpGet);
        HttpEntity entity = response.getEntity();

        if (entity != null) {
            String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);
            String saveFilePath = saveDir + "/" + fileName;

            FileOutputStream outputStream = new FileOutputStream(saveFilePath);
            entity.writeTo(outputStream);
            outputStream.close();

            System.out.println("文件下载完成");
        }

        httpClient.close();
    }

    public static void main(String[] args) {
        try {
            FileDownloader.downloadFile(" "/path/to/save/directory");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

代码解释

我们使用CloseableHttpClient类创建一个默认的HttpClient对象。然后,我们创建一个HttpGet对象来表示要

举报

相关推荐

0 条评论