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