1. 概要

このクイックチュートリアルでは、Javaバイト配列をファイルに書き込むいくつかの異なる方法を学習します。 JavaIOパッケージを使用して最初から始めます。 次に、JavaNIOを使用した例を見ていきます。 その後、GoogleGuavaとApacheCommonsIOを使用します。

2. Java IO

JavaのIOパッケージはJDK1.0から存在しており、データの読み取りと書き込みのためのクラスとインターフェースのコレクションを提供します。

FileOutputStream を使用して、画像をファイルに書き込みましょう。

File outputFile = tempFolder.newFile("outputFile.jpg");
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
    outputStream.write(dataForWriting);
}

宛先ファイルへの出力ストリームを開き、 byte [] dataForWritingwriteメソッドに渡すだけです。 ここではtry-with-resourcesブロックを使用して、IOExceptionがスローされた場合にOutputStreamを確実に閉じることに注意してください。

3. Java NIO

JavaNIOパッケージはJava1.4で導入され、NIO用のファイルシステムAPIはJava7の拡張機能として導入されました。 Java NIOはバッファリングを使用し、非ブロッキングですが、Java IOはブロッキングストリームを使用します。ファイルリソースを作成するための構文は、java.nio.fileパッケージでより簡潔になっています。

Files クラスを使用して、 byte[]を1行で書き込むことができます。

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

この例では、ファイルを作成するか、既存のファイルを切り捨てて書き込み用に開きます。 Paths.get( “path / to / file”)または Paths.get( “path”、 “to”、 “file”)を使用して[X112X ]ファイルが保存される場所を説明するパス。 Path は、パスを表現するJavaNIOネイティブの方法です。

ファイルを開く動作をオーバーライドする必要がある場合は、OpenOptionwriteメソッドに提供することもできます。

4. Google Guava

Guava は、IOを含むJavaで一般的な操作を実行するためのさまざまなタイプを提供するGoogleのライブラリです。

Guavapom.xmlファイルにインポートしましょう。

<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>31.0.1-jre</version>
</dependency>

4.1. グアバファイル

Java NIOパッケージと同様に、 byte[]を1行で記述できます。

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 を提供する必要がある場合は、MoreFiles[を使用してByteSinkを取得できます。 X149X]クラス:

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.11.0</version>
</dependency>

それでは、FileUtilsクラスを使用してbyte[]を記述しましょう。

FileUtils.writeByteArrayToFile(outputFile, dataForWriting);

FileUtils.writeByteArrayToFile メソッドは、目的の宛先と書き込み中のバイナリデータを表す File を提供するという点で、これまでに使用した他のメソッドと似ています。 宛先ファイルまたは親ディレクトリのいずれかが存在しない場合、それらが作成されます。

6. 結論

この短いチュートリアルでは、プレーンJavaと2つの一般的なJavaユーティリティライブラリであるGoogleGuavaとApacheCommons IOを使用して、 byte[]からファイルにバイナリデータを書き込む方法を学びました。

いつものように、サンプルコードはGitHubから入手できます。