迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

将InputStream转换为Java中的文件对象

作者:迹忆客 最近更新:2023/08/01 浏览次数:

我们经常需要创建文件并向其中添加内容。 例如,我们需要将通过网络接收的字节或字符串元素保存到文件中。

在每种情况下,数据都以 InputStream 形式出现,并且必须写入文件。 今天的教程讨论如何在Java中将InputStream转换为File对象。

为此,我们将根据 Java 版本,使用不同的方式编写不同的示例代码,将 InputStream 转换为 File 对象。 下面给出了一些方法:


使用纯Java将InputStream转换为文件对象

示例代码:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

public class plainJava {
    public static void main(String[] args) {

        try {
            InputStream inputStream = new FileInputStream(
                new File("./files/test.txt"));

            byte[] buffer = new byte[inputStream.available()];
            inputStream.read(buffer);

            File destinationFile = new File("./files/test-plainJava-output.txt");

            OutputStream outputStream = new FileOutputStream(destinationFile);
            outputStream.write(buffer);

        } catch (FileNotFoundException exception) {
            exception.printStackTrace();
        } catch (IOException exception) {
            exception.printStackTrace();
        }
    }
}

我们在上面的Java程序中通过指定文件路径来实例化FileInputStream。 如果文件不存在或者拼写错误,它将生成 FileNotFoundException 异常。

我们使用 FileInputStream 从给定文件中检索输入字节。 然后,我们创建一个名为 buffer 的 byte 类型数组,其中 inputStream.available() 方法告诉我们可以读取的字节数,直到 read() 调用阻塞程序的执行流程。

之后,我们实例化 File 类以创建 test-plainJava-output.txt 文件并将其引用保存在 destinationFile 变量中。 接下来,我们创建一个 FileOutputStream 对象,传递我们在上一步中创建的目标文件的引用,并写入字节码。

现在,打开 test.txt 和 test-plainJava-output.txt 文件,可以看到两者具有相同的内容。 请记住,如果在读取或写入信息时遇到任何问题,我们可能会收到 IOException。


Java中使用Files.copy()方法将InputStream转换为File对象

示例代码:

import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;


public class filesCopy {

    private static final String OUTPUT_FILE = "./files/test_filesCopy-output.txt";

    public static void main(String[] args) {
        URI u = URI.create("https://www.google.com/");

        try (InputStream inputStream = u.toURL().openStream()) {
            // Java 1.7 onwards
            Files.copy(inputStream, Paths.get(OUTPUT_FILE));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

我们可以在 Java 7 或更高版本中使用这种方法。 在上面的代码栅栏中,我们使用Java NIO API的Files.copy(),它用于将InputStream对象复制到文件对象,如上所示。

在filesCopy程序中,我们首先创建一个String类型的对象来包含输出文件的路径。

main() 方法中,我们使用 create() 方法创建一个 URI 对象,并将其引用保存在 u 变量中,该变量将在下一步中使用。 请记住,当我们确定指定的字符串值将被解析为 URI 对象时,我们会使用 create() ; 否则会被认为是程序员的错误。

接下来,我们使用 URI 对象 u 调用 toURL() 方法从该 URI 构造 URL,并使用 openStream() 方法获取 java.io.InputSteam 对象。 之后,我们使用 Files.copy() 方法,该方法采用两个参数:inputStream 对象和要复制数据的文件的路径。

现在,我们将在输出文件 test_filesCopy-output.txt 中看到解析后的数据。 如果发生异常,我们使用 try-catch 块来处理; 否则,程序将终止执行。


Java中使用InputStream.transferTo()方法将InputStream转换为文件对象

示例代码:

import java.io.*;
import java.net.URI;


public class inputStreamTransferTo {

    public static void main(String[] args) {
        URI u = URI.create("https://www.google.com/");

        try (InputStream inputStream = u.toURL().openStream()) {

            File outputFile = new File("./files/test_transferTo-output.txt");
            OutputStream outputStream = new FileOutputStream(outputFile, false);
            inputStream.transferTo(outputStream); //Java 9

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

如果我们有 Java 9 或更高版本,我们可以使用这种方法。 此代码示例与我们使用 Files.copy() 方法的上一个示例类似,只是 try 块中存在一些差异。

在这里,我们通过指定输出文件(在本例中为 test_transferTo-output.txt)来创建 File 类的对象。 然后,我们使用此 File 对象实例化 FileOutputStream 类,我们将使用该类将数据写入输出文件 (test_transferTo_output.txt)。

最后,我们使用inputStream.transferTo()方法,该方法以输出流为参数,直接将inputStream复制到指定的outputSteam。 现在,您将在输出文件 test_transferTo_output.txt 中获得解析后的数据。

我们还将这段代码包含在 try-catch 块中以避免程序终止。


使用 Apache Commons IO API 将 InputStream 转换为 Java 中的文件对象

示例代码:

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;

public class apacheCommons {

    public static void main(String[] args) throws IOException {

        URI u = URI.create("https://www.google.com/");
        try (InputStream inputStream = u.toURL().openStream()) {
            File outputFile = new File("./files/test_apache_output.txt");
            // commons-io
            FileUtils.copyInputStreamToFile(inputStream, outputFile);
        }
    }
}

此示例代码与前面的代码类似。 我们创建一个 URI 对象来调用 toURL,它将通过这个 URI 对象构建一个 URL,使用 openStream() 方法获取 java.io.InputStream 对象,并实例化指向输出文件 test_apache_output 的路径的 File 类 .txt 在这里。

但是,我们使用 Apache Commons IO API 将输入流转换为 Java 中的文件对象。 这个API非常方便,提供了各种功能来执行不同的文件输入/输出操作。

要使用这个库,我们首先必须在 pom.xml 文件中添加 commons-io 依赖项,如下所示:

<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.7</version>
</dependency>

然后,我们可以使用 copyInputStreamToFile() 方法从输入流中读取字节并将其复制到指定文件中。 现在,您可以在 test_apache_output.txt 文件中看到解析的数据,该文件是一个输出文件。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便