迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > 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 文件中看到解析的数据,该文件是一个输出文件。

上一篇:Java 中的八皇后问题

下一篇:没有了

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

本文地址:

相关文章

Java 中的八皇后问题

发布时间:2023/08/01 浏览次数:188 分类:Java

本文介绍了 Java 中的八皇后问题。Java 中的八皇后问题 八皇后问题是我们必须将八个皇后放置在 8x8 的棋盘上,并且不能互相攻击。

Java 中的字谜

发布时间:2023/08/01 浏览次数:94 分类:Java

在本文中,我们将了解如何确定两个单词是否是字谜词。 我们将通过示例和解释来涵盖该主题,以使该主题变得更容易。在 Java 中查找 Anagram 在下面的示例中,我们说明了如何检查给定的两个

在 Java 中反序列化 JSON

发布时间:2023/08/01 浏览次数:99 分类:Java

本文介绍如何在 Java 中反序列化 JSON。在 Java 中反序列化 JSON 提供了用于 JSON 操作的不同库。 这些库还可以在 Java 中序列化和反序列化 JSON 对象。

在 Java 中将对象序列化为 JSON

发布时间:2023/07/21 浏览次数:197 分类:Java

本文介绍了如何使用 Java-JSON 和 Jackson API 在 Java 中将对象序列化为 JSON。在 Java 中将对象序列化为 JSON 提供了用于 JSON 操作的不同库。

在 Java 中漂亮打印 JSON 数据

发布时间:2023/07/21 浏览次数:115 分类:Java

我们将使用必要的示例和解释来讨论该主题,以使问题变得更容易。 我们将在本文中讨论三种最常用的方法。在 Java 中使用 Gson 漂亮地打印 JSON 数据

在 Java 中合并 PDF

发布时间:2023/07/21 浏览次数:160 分类:Java

本文将展示如何在 Java 中合并多个 PDF 文件以及必要的示例和解释来阐明该主题。在Java中使用PDFBox合并PDF 在下面的示例中,我们将说明如何使用 PDFBox 合并两个不同的 PDF。

在 Java 接口中定义静态方法

发布时间:2023/07/21 浏览次数:187 分类:Java

本文列出了 Java 接口中静态方法的规则,并演示了如何定义它们以及为什么我们不能重写它们。 我们还将探讨 Java 8 之前的接口中没有静态方法的原因。Java接口中的静态方法

Java 禁用 SSL 验证

发布时间:2023/07/21 浏览次数:104 分类:Java

本文将展示如何在创建 HTTP 连接时禁用此证书验证。 此外,我们将编写一个示例代码,并提供有关该主题的解释,以使其易于理解。Java 禁用 SSL 验证

限制 Java SSL 调试日志记录

发布时间:2023/07/21 浏览次数:184 分类:Java

通过本文我们将了解 Java SSL 调试、其重要性、各种实用程序以及如何在单个命令中使用一个或多个实用程序。Java SSL 调试及其重要性

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便