This article shows a few ways to save a byte[]
into a file.
For JDK 1.7 and above, the NIO Files.write is the simplest solution to save byte[]
to a file.
// bytes = byte[]
Path path = Paths.get("/path/file");
Files.write(path, bytes);
FileOutputStream
is the best alternative.
try (FileOutputStream fos = new FileOutputStream("/path/file")) {
fos.write(bytes);
//fos.close // no need, try-with-resources auto close
}
If we have Apache Commons IO, try FileUtils
.
FileUtils.writeByteArrayToFile(new File("/path/file"), bytes);
pom.xml
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.7</version> </dependency>
1. Save byte[] to a file.
The below example reads a file and converts the data into a byte[]
. Later, we save the byte[]
into another file.
ByteToFile.java
package com.favtuts.io.howto; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import org.apache.commons.io.FileUtils; public class ByteToFile { public static void main(String[] args) { try { // tested with character data String filePath = "/home/tvt/workspace/favtuts/file.txt"; // file to bytes[] // byte[] bytes = Files.readAllBytes(Paths.get(filePath)); // byte[] bytes = readFileToBytesClassic(filePath); // byte[] bytes = readFileToBytesJava7(filePath); // byte[] bytes = readFileToBytesJavaNio(filePath); byte[] bytes = readFileToBytesCommonsIO(filePath); // save byte[] to a file writeBytesToFile("/home/tvt/workspace/favtuts/file2.txt", bytes); writeBytesToFileNio("/home/tvt/workspace/favtuts/file3.txt", bytes); writeBytesToFileApache("/home/tvt/workspace/favtuts/file4.txt", bytes); System.out.println("Done"); // tested with binary data filePath = "/home/tvt/workspace/favtuts/phone.png"; bytes = readFileToBytesJavaNio(filePath); // save byte[] to a file writeBytesToFile("/home/tvt/workspace/favtuts/phone2.png", bytes); writeBytesToFileNio("/home/tvt/workspace/favtuts/phone3.png", bytes); writeBytesToFileApache("/home/tvt/workspace/favtuts/phone4.png", bytes); } catch (IOException e) { e.printStackTrace(); } } private static byte[] readFileToBytesJavaNio(String filePath) throws IOException { byte[] bytes = Files.readAllBytes(Paths.get(filePath)); return bytes; } // Apache Commons IO, try FileUtils. private static byte[] readFileToBytesCommonsIO(String filePath) throws IOException { //... File file = new File(filePath); byte[] bytes = FileUtils.readFileToByteArray(file); return bytes; } // try-with-resources version private static byte[] readFileToBytesJava7(String filePath) throws IOException { File file = new File(filePath); byte[] bytes = new byte[(int) file.length()]; // funny, if can use Java 7, please uses Files.readAllBytes(path) try(FileInputStream fis = new FileInputStream(file)){ fis.read(bytes); } return bytes; } // file to byte[], old and classic way, before Java 7 private static byte[] readFileToBytesClassic(String filePath) throws IOException { File file = new File(filePath); byte[] bytes = new byte[(int) file.length()]; FileInputStream fis = null; try { fis = new FileInputStream(file); //read file into bytes[] fis.read(bytes); } finally { if (fis != null) { fis.close(); } } return bytes; } //JDK 7 - FileOutputStream + try-with-resources private static void writeBytesToFile(String fileOutput, byte[] bytes) throws IOException { try (FileOutputStream fos = new FileOutputStream(fileOutput)) { fos.write(bytes); } } //JDK 7, NIO, Files.write private static void writeBytesToFileNio(String fileOutput, byte[] bytes) throws IOException { Path path = Paths.get(fileOutput); Files.write(path, bytes); } // Apache Commons IO private static void writeBytesToFileApache(String fileOutput, byte[] bytes) throws IOException { FileUtils.writeByteArrayToFile(new File(fileOutput), bytes); } }
Download Source Code
$ git clone https://github.com/favtuts/java-core-tutorials-examples
$ cd java-io/howto