用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”)
來構造描述文件存儲位置的Path
。 Path
是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[]
中的二進制數據寫入文件。