将InputStream转换为Java中的文件对象
我们经常需要创建文件并向其中添加内容。 例如,我们需要将通过网络接收的字节或字符串元素保存到文件中。
在每种情况下,数据都以 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 中的八皇后问题
发布时间:2023/08/01 浏览次数:188 分类:Java
-
本文介绍了 Java 中的八皇后问题。Java 中的八皇后问题 八皇后问题是我们必须将八个皇后放置在 8x8 的棋盘上,并且不能互相攻击。
在 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 调试及其重要性