拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 用Java将byte []写入文件

用Java将byte []写入文件

白鹭 - 2021-11-24 505 0 0

1.概述

在本快速教程中,我们将学习几种将Java字节数组写入文件的不同方法。我们将从一开始就使用Java IO包开始。接下来,我们将看一个使用Java NIO的示例。之后,我们将使用Google Guava和Apache Commons IO。

2. Java IO

Java的IO软件包自JDK 1.0起就存在,并提供用于读取和写入数据的类和接口的集合。

让我们使用FileOutputStream将图像写入文件:

File outputFile = tempFolder.newFile("outputFile.jpg");

 try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {

 outputStream.write(dataForWriting);

 }

我们将输出流打开到目标文件,然后我们可以简单地将byte[] dataForWriting传递给write方法。请注意,我们在此处使用try-with-resources块来确保在抛出IOException情况下关闭OutputStream

3. Java NIO

Java NIO软件包是在Java 1.4中引入的,而NIO的文件系统API是在Java 7中的扩展。Java NIO使用缓冲并且是非阻塞的,而Java IO使用阻塞流。java.nio.file包中,用于创建文件资源的语法更加简洁。

我们可以使用Files类将byte[]写成一行:

Files.write(outputFile.toPath(), dataForWriting);

我们的示例要么创建文件,要么截断现有文件,然后将其打开以进行写入。我们还可以使用Paths.get(“path/to/file”)Paths.get(“path”, “to”, “file”)来构造描述文件存储位置的PathPath是Java NIO原生表达路径的方式。

如果需要覆盖文件打开行为,我们还可以向write方法提供OpenOption

4. Google Guava

Guava是Google提供的一种库,提供了多种类型的Java执行常见操作,包括IO。

让我们将番石榴导入我们的pom.xml文件中:

<dependency>

 <groupId>com.google.guava</groupId>

 <artifactId>guava</artifactId>

 <version>30.0-jre</version>

 </dependency>

4.1 Guava Files

与Java NIO包一样,我们可以在一行中写入byte[]

Files.write(dataForWriting, outputFile);

Guava的Files.write方法还带有可选的OptionOptions并且使用与java.nio.Files.write相同的默认值。

不过这里有一个陷阱:Guava Files.write方法用@Beta批注标记根据文档,这意味着它可以随时更改,因此不建议在库中使用。

因此,如果我们正在编写一个库项目,则应考虑使用ByteSink

4.2。 ByteSink

我们还可以创建一个ByteSink来写入我们的byte[]

ByteSink byteSink = Files.asByteSink(outputFile);

 byteSink.write(dataForWriting);

ByteSink是我们可以向其写入字节的目的地。它提供一个OutputStream到目的地。

如果我们需要使用java.nio.files.Path或提供特殊OpenOption ,我们可以得到我们的ByteSink使用MoreFiles类:

ByteSink byteSink = MoreFiles.asByteSink(outputFile.toPath(),

 StandardOpenOption.CREATE,

 StandardOpenOption.WRITE);

 byteSink.write(dataForWriting);

5. Apache Commons IO

Apache Commons IO提供了一些常见的文件任务。

让我们导入commons-io的最新版本:

<dependency>

 <groupId>commons-io</groupId>

 <artifactId>commons-io</artifactId>

 <version>2.8.0</version>

 </dependency>

现在,让我们使用FileUtils类编写byte[]

FileUtils.writeByteArrayToFile(outputFile, dataForWriting);

FileUtils.writeByteArrayToFile方法与我们使用的其他方法相似,我们为它提供一个File ,该File代表我们想要的目标和正在写入的二进制数据。如果我们的目标文件或任何父目录不存在,则会创建它们。

六,结论

在这个简短的教程中,我们学习了如何使用纯Java和两个流行的Java实用程序库(Google Guava和Apache Commons IO)将byte[]中的二进制数据写入文件。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *