Java远程下载zip文件


前言

在进行C站的Java认证C4的模拟考试中遇到了一道关于远程下载zip文件并解压到指定目录中,再对解压后的文件进行单独的加密的题目,在模拟考试结束后又对内容进行一次实现,在实现的过程百度了很多的内容,但是很少能够遇到有帮助的回答,因此将用到的知识以及实现的思路和实现后的理解与心得在此进行记录。
在这里插入图片描述


提示:以下是本篇文章正文内容,下面案例可供参考

一、已知内容

  1. 远程文件的地址:https://xxxxxx.xxxxx.xxxxxxx.com/xxxxx/xxxxx.文件名后缀
  2. 文件下载的后缀:.zip文件

二、实现过程

1. 使用对象

  1. BufferedInputStream:创建一个BufferedInputStream并保存其参数,即输入流in,用来读取文本文件内容。
  2. BufferedOutputStream:创建一个新的缓冲输出流,以将数据写入指定的底层输出流。
  3. HttpURLConnection:创建一个支持HTTP特定功能的URLConnection。每个HttpURLConnection实例都可用于生成单个请求,实例可以透明地共享连接到 HTTP 服务器的基础网络。
  4. URL:代表一个统一资源定位符,它是指向互联网“资源”的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用。
  5. FileOutputStream:创建一个向指定File对象表示的文件中写入数据的文件输出流,用于将数据写入File对象中。

2. 实现思路

  1. 在类中定义了两个分别表示要下载的文件的名称(这里是自定义下载的文件名并且包括文件名后缀)以及文件的存储路径的全局属性。
  2. 分别声明BufferedInputStream、BufferedOutputStream和HttpURLConnection对象,在实例化URL对象时将远程文件的路径作为参数声明一个指向要下载对的文件的网络资源的指针
  3. 将指向资源的指针url强转为支持HTTP下载功能的HttpURLConnection连接对象
  4. 因为此时的HttpURLConnection对象是一个支持HTTP下载功能的URLConnection对象,因此可以调用URLConnection对象中的connect()方法打开到刚才指定下载路径的资源的通信链接
  5. 开启输入流,并将输出流输写入到本地指定的位置中。

3. 实现代码

package com.shijimo.C4.util;

import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import org.junit.Test;

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

/**
 * @author Dream_飞翔
 * @date 2021/10/12
 * @time 0:10
 * @email 1072876976@qq.com
 *
 * 对文件进行操作的工具类
 */
public class FileUtil {

    // 定义要下载的zip文件的名称
    String zipName = "download.zip";
    // 定义下载文件的存储路径
    String localFilePath = "\\C4\\project1\\file\\";

    /**
     * 从远程下载文件并将下载的文件存储到本地
     */
    @Test
    public void downloadFile() throws IOException {

        BufferedInputStream in = null;
        BufferedOutputStream out = null;
        HttpURLConnection httpUrl = null;

        try {
            // 定义要进行远程下载的路径
            URL url = new URL("https://这里就是下载远程文件的地址");
            httpUrl = (HttpURLConnection) url.openConnection();

            // 开启文件下载路径的连接
            httpUrl.connect();

            // 开启输入流
            in = new BufferedInputStream(httpUrl.getInputStream());
            // 将获取到的文件输出到输出流当中
            out = new BufferedOutputStream(new FileOutputStream(localFilePath + zipName));

            // 定义远程下载的文件最大为2MB
            int len = 2048;
            byte[] bytes = new byte[len];

            // 将输出流写到本地目录中
            while ((len = in.read(bytes)) != -1) {
                out.write(bytes, 0, len);
            }

            // 将流关闭
            out.close();
            in.close();
            httpUrl.disconnect();

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 将流对象关闭
            out.close();
            in.close();
            httpUrl.disconnect();
        }
    }

}

在这里我使用了Junit4进行测试方法是否可以成功的将文件进行远程下载


四、运行结果

在运行前本地存储文件的目录为空
在这里插入图片描述
在运行了刚才写的方法之后
在这里插入图片描述


总结

在实现了这个小的功能的过程中深刻的意识到我目前对于IO流的掌握还有欠缺,而且在接触了SSM框架以及SpringBoot之后对JavaSE的基础的重视程度更加不足,在模拟考试的过程中深刻的意识到了这一点后,更要加强对Java基础的掌握与重视。同时在实现这个功能的过程中我也更加的理解IO流,感谢C4!
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_飞翔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值