Escribir en un archivo binario en Java
Esta publicación discutirá cómo escribir en un archivo binario en Java.
La solución debería crear el archivo si no existe o truncar el archivo antes de escribir si ya existe. Las siguientes son algunas opciones disponibles en Java para escribir bytes en un archivo binario.
1. Usando Files
Class
Con Java 7, podemos usar Files.write(…), que escribe bytes en un archivo de manera eficiente. Abre el archivo para escribir, crear el archivo si no existe o truncar inicialmente un archivo existente al tamaño 0.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; class Main { public static void main(String[] args) { Path path = Paths.get("doc.txt"); byte[] bytes = "ABCD".getBytes(StandardCharsets.UTF_8); try { Files.write(path, bytes); // Solo Java 7+ System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
2. Usando FileOutputStream
FileOutputStream
está diseñado para escribir secuencias de bytes sin procesar, como datos de imágenes. Aquí hay un ejemplo de trabajo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("input.txt"); byte[] data = "ABCD".getBytes(StandardCharsets.UTF_8); try (FileOutputStream fos = new FileOutputStream(file)) { fos.write(data); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
3. Usando DataOutputStream
Podemos usar un flujo de salida de datos para escribir la string en el flujo de salida subyacente como una secuencia de bytes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.io.*; class Main { public static void main(String[] args) { File file = new File("foo.out"); String text = "ABCD"; try (FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos)) { dos.writeBytes(text); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
4. Usando la biblioteca de Guava
Guava’s Files.write(byte[], File) El método se puede utilizar para sobrescribir un archivo con el contenido de una array de bytes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import com.google.common.io.Files; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("doc.txt"); byte[] data = "ABCD".getBytes(StandardCharsets.UTF_8); try { Files.write(data, file); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
5. Uso de Apache Commons IO
FileUtils
clase de la biblioteca Apache Commons IO tiene el writeByteArrayToFile(File, byte[]) método, que escribe una array de bytes en un archivo. Si el archivo ya existe, se truncará antes de escribirlo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import org.apache.commons.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("foo.out"); byte[] data = "ABCD".getBytes(StandardCharsets.UTF_8); try { FileUtils.writeByteArrayToFile(file, data); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
6. Uso FileChannel
para archivos grandes
Para escribir archivos binarios grandes, use FileChannel
. Tenga en cuenta que esto no sobrescribe un archivo existente.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.charset.StandardCharsets; class Main { public static void main(String[] args) { File file = new File("doc.txt"); byte[] data = "ABCD".getBytes(StandardCharsets.UTF_8); try (RandomAccessFile stream = new RandomAccessFile(file, "rw"); FileChannel channel = stream.getChannel()) { ByteBuffer buffer = ByteBuffer.allocate(data.length); buffer.put(data); buffer.flip(); channel.write(buffer); System.out.println("Successfully written data to the file"); } catch (IOException e) { e.printStackTrace(); } } } |
Eso es todo acerca de escribir en un archivo binario en Java.
Ver también: