zoukankan      html  css  js  c++  java
  • Java InputStream转File

    • 文件处于磁盘上或者流处于内存中
    在输入流有已知的和预处理的数据时,如在硬盘上的文件或者在流处于内存中。这种情况下,不需要做边界校验,并且内存容量条件允许的话,可以简单的读取并一次写入。
    InputStream initialStream = new FileInputStream(new File("src/main/resources/sample.txt"));
    byte[] buffer = new byte[initialStream.available()];
    initialStream.read(buffer);
     
    File targetFile = new File("src/main/resources/targetFile.tmp");
    OutputStream outStream = new FileOutputStream(targetFile);
    outStream.write(buffer); 
     
    基于Guava的实现
    InputStream initialStream = new FileInputStream(new File("src/main/resources/sample.txt"));
    byte[] buffer = new byte[initialStream.available()];
    initialStream.read(buffer);
    File targetFile = new File("src/main/resources/targetFile.tmp");
    Files.write(buffer, targetFile);
    基于Commons IO的实现
    InputStream initialStream = FileUtils.openInputStream(new File("src/main/resources/sample.txt"));
    File targetFile = new File("src/main/resources/targetFile.tmp");
    FileUtils.copyInputStreamToFile(initialStream, targetFile);

     

    • 输入流映射正在进行的数据流
    如果输入流链接到正在进行的数据流上,如来自正在进行的链接的HTTP响应,此时可能无法一次读取整个流。这种情况下,我们需要确保一直读取到流的尽头。
    File targetFile = new File("src/main/resources/targetFile.tmp");
    try(InputStream initialStream = new FileInputStream(new File("src/main/resources/sample.txt"));
        OutputStream outStream = new FileOutputStream(targetFile)) {
        byte[] buffer = new byte[8 * 1024];
        int bytesRead;
        while ((bytesRead = initialStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    另一种实现方式:
    try (InputStream initialStream = new FileInputStream(new File("src/main/resources/sample.txt"))) {
        File targetFile = new File("src/main/resources/targetFile.tmp");
     
        java.nio.file.Files.copy(
                initialStream,
                targetFile.toPath(),
                StandardCopyOption.REPLACE_EXISTING);
    } catch (Exception e) {
        e.printStackTrace();
    }
  • 相关阅读:
    Cesium实现键盘控制镜头效果
    怎么判断一个服务器的服务器性能
    2T以上的盘怎么分区, 利用parted创建 linuxTB硬盘GPT分区
    解压和压缩的简单用法
    关于windows修改远程登录端口的问题
    tomcat启动非常慢;连接oracle数据库失败,jdbc错误日志提示connection reset;测试主机间网络互通及数据库端口都正常
    docker的安装和基础使用
    Centos7 时区的设置
    Day24 中间件 自定义分页 ModelForm 序列化 缓存 信号
    Day22 博客园的构建
  • 原文地址:https://www.cnblogs.com/asfeixue/p/9065681.html
Copyright © 2011-2022 走看看