Java中通过流下载文件

写在前面: 我是 「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

相关文章: 使用Java以zip形式批量下载文件、压缩文件

1. 步骤

  1. 保证创建一个新文件
  2. 创建大小为1024的buffer数组
  3. 创建文件输出流
  4. 创建字节缓冲输出流
  5. 文件逐步写入本地
    5.1 先读出来保存到buffer数组中
    5.2 然后从 buffer数组中写出数据保存到本地
  6. 最后关闭流释放资源(反向关闭)

2. 代码实现

/**
 * 通过流下载文件
 *
 * @param bis      res.bodyStream()
 * @param filePath 文件路径
 * @param fileName 文件名称
 */
public static void downloadFileByStream(BufferedInputStream bis, String filePath, String fileName) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    String fullPath = basePath + sdf.format(new Date()) + File.separator + filePath + File.separator + fileName;
    try {
        // 1. 保证创建一个新文件
        File file = new File(fullPath);
        if (!file.getParentFile().exists()) {
            file.getParentFile().mkdirs();
        }
        if (file.exists()) {
            file.delete();
        }
        file.createNewFile();

        // 2. 创建大小为1024的buffer数组
        byte[] buffer = new byte[1024];

        int readLength;
        // 3. 创建文件输出流,FileOutputStream流以写入数据到File对象表示的文件
        FileOutputStream fos = new FileOutputStream(new File(fullPath));
        // 4. 创建字节缓冲输出流
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        // 5. 文件逐步写入本地
        // 5.1 先读出来保存到 buffer数组中
        while ((readLength = bis.read(buffer, 0, 1024)) != -1) {
            // 5.2 然后从 buffer数组中写出数据保存到本地
            bos.write(buffer, 0, readLength);
        }
        // 6. 最后关闭流释放资源(反向关闭)
        bos.close();
        fos.close();
        bis.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

已标记关键词 清除标记
相关推荐
JAVA开发人员必备是HTML格式的 JavaTM 2 Platform Standard Edition 6 API 规范 本文档是 Java 2 Platform Standard Edition 6.0 的 API 规范。 请参见: 描述 Java 2 Platform 软件包 java.applet 提供创建 applet 所必需的类和 applet 用来与其 applet 上下文通信的类。 java.awt 包含用于创建用户界面和绘制图形图像的所有类。 java.awt.color 提供用于颜色空间的类。 java.awt.datatransfer 提供在应用程序之间和在应用程序内部传输数据的接口和类。 java.awt.dnd Drag 和 Drop 是一种直接操作动作,在许多图形用户界面系统都会遇到它,它提供了一种机制,能够在两个与 GUI 显示元素逻辑相关的实体之间传输信息。 java.awt.event 提供处理由 AWT 组件所激发的各类事件的接口和类。 java.awt.font 提供与字体相关的类和接口。 java.awt.geom 提供用于在与二维几何形状相关的对象上定义和执行操作的 Java 2D 类。 java.awt.im 提供输入方法框架所需的类和接口。 java.awt.im.spi 提供启用可以与 Java 运行时环境一起使用的输入方法开发的接口。 java.awt.image 提供创建和修改图像的各种类。 java.awt.image.renderable 提供用于生成与呈现无关的图像的类和接口。 java.awt.print 为通用的打印 API 提供类和接口。 java.beans 包含与开发 beans 有关的类,即基于 JavaBeansTM 架构的组件。 java.beans.beancontext 提供与 bean 上下文有关的类和接口。 java.io 通过数据流、序列化和文件系统提供系统输入和输出。 java.lang 提供利用 Java 编程语言进行程序设计的基础类。 java.lang.annotation 为 Java 编程语言注释设施提供库支持。 java.lang.instrument 提供允许 Java 编程语言代理检测运行在 JVM 上的程序的服务。 java.lang.management 提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。 java.lang.ref 提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。 java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio 定义作为数据容器的缓冲区,并提供其他 NIO 包的概述。 java.nio.channels 定义了各种通道,这些通道表示到能够执行 I/O 操作的实体(如文件和套接字)的连接;定义了用于多路复用的、非阻塞 I/O 操作的选择器。 java.nio.channels.spi 用于 java.nio.channels 包的服务提供者类。 java.nio.charset 定义用来在字节和 Unicode 字符之间转换的 charset、解码器和编码器。 java.nio.charset.spi java.nio.charset 包的服务提供者类。 java.rmi 提供 RMI 包。 java.rmi.activation 为 RMI 对象激活提供支持。 java.rmi.dgc 为 RMI 分布式垃圾回收提供了类和接口。 java.rmi.registry 提供 RMI 注册表的一个类和两个接口。 java.rmi.server 提供支持服务器端 RMI 的类和接口。 java.security 为安全框架提供类和接口。 java.security.acl 此包的类和接口已经被 java.security 包的类取代。 java.security.cert 提供用于解析和管理证书、证书撤消列表 (CRL) 和证书路径的类和接口。 java.security.interfaces 提供的接口用于生成 RSA Laboratory Technical Note PKCS#1 定义的 RSA(Rivest、Shamir 和 Adleman AsymmetricCipher 算法)密钥,以及 NIST 的 FIPS-
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页