用Java將byte []寫入文件

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[]中的二進制數據寫入文件。