Creando un archivo usando FileOutputStream

La clase FileOutputStream pertenece al flujo de bytes y almacena los datos en forma de bytes individuales. Se puede utilizar para crear archivos de texto. Un archivo representa el almacenamiento de datos en un segundo medio de almacenamiento, como un disco duro o un CD. Si un archivo está disponible o no o puede crearse depende de la plataforma subyacente. Algunas plataformas, en particular, permiten que un archivo se abra para escribir solo con un FileOutputStream (u otros objetos de escritura de archivos) a la vez. En tales situaciones, los constructores de esta clase fallarán si el archivo en cuestión ya está abierto.

FileOutputStream está diseñado para escribir flujos de bytes sin procesar, como datos de imágenes. Para escribir secuencias de caracteres, considere usar FileWriter.

Métodos importantes:

  • void close() :  Cierra este flujo de salida de archivo y libera cualquier recurso del sistema asociado con este flujo.
  • protected void finalize() :  limpia la conexión con el archivo y garantiza que se llame al método de cierre de este flujo de salida de archivo cuando no haya más referencias a este flujo.
  • void write(byte[] b) :  Escribe bytes b.length desde la array de bytes especificada a este flujo de salida de archivo.
  • void write(byte[] b, int off, int len) :  Escribe len bytes desde la array de bytes especificada comenzando en el desplazamiento hacia este flujo de salida de archivo.
  • void write(int b) :  Escribe el byte especificado en este flujo de salida de archivo.

Se deben seguir los siguientes pasos para crear un archivo de texto que almacene algunos caracteres (o texto):

  1. Lectura de datos: En primer lugar, los datos deben leerse desde el teclado. Para ello, asocie el teclado a alguna clase de flujo de entrada. El código para usar la clase DataInputSream para leer datos desde el teclado es el siguiente:
    DataInputStream dis =new DataInputStream(System.in);

    Aquí System.in representa el teclado que está vinculado con el objeto DataInputStream

  2. Enviar datos a OutputStream: ahora, asocie un archivo donde se almacenarán los datos a algún flujo de salida. Para esto, tome la ayuda de FileOutputStream que puede enviar datos al archivo. Adjuntar el archivo.txt a FileOutputStream se puede hacer como:
    FileOutputStream fout=new FileOutputStream(“file.txt”);
  3. Lectura de datos de DataInputStream: el siguiente paso es leer datos de DataInputStream y escribirlos en FileOutputStream. Significa leer datos de dis object y escribirlos en fout object, como se muestra aquí:
    ch=(char)dis.read();
    fout.write(ch);
  4. Cierre el archivo: finalmente, cualquier archivo debe cerrarse después de realizar operaciones de entrada o salida en él, de lo contrario, los datos pueden dañarse. El cierre del archivo se realiza cerrando los flujos asociados. Por ejemplo, fout.close(): cerrará FileOutputStream, por lo tanto, no hay forma de escribir datos en el archivo.

Implementación:

//Java program to demonstrate creating a text file using FileOutputStream
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
class Create_File
{
    public static void main(String[] args) throws IOException 
    {
        //attach keyboard to DataInputStream
        DataInputStream dis=new DataInputStream(System.in);
  
        // attach file to FileOutputStream
        FileOutputStream fout=new FileOutputStream("file.txt");
  
        //attach FileOutputStream to BufferedOutputStream
        BufferedOutputStream bout=new BufferedOutputStream(fout,1024);
        System.out.println("Enter text (@ at the end):");
        char ch;
  
        //read characters from dis into ch. Then write them into bout.
        //repeat this as long as the read character is not @
        while((ch=(char)dis.read())!='@')
        {
            bout.write(ch);
        }
        //close the file
        bout.close();
    }
}

Si el Programa se vuelve a ejecutar, los datos antiguos de file.txt se perderán y los datos recientes solo se almacenarán en el archivo. Si no queremos perder los datos anteriores del archivo, y simplemente agregar los nuevos datos al final de los datos ya existentes, esto se puede hacer escribiendo verdadero junto con el nombre del archivo.

FileOutputStream fout=new FileOutputStream(“file.txt”,true);

Mejora de la eficiencia con BufferedOutputStream

Normalmente, cada vez que escribimos datos en un archivo usando FileOutputStream como:

fout.write(ch);

Aquí, se invoca FileOutputStream para escribir los caracteres en el archivo. Estimemos el tiempo que lleva leer 100 caracteres del teclado y escribirlos todos en un archivo.

  • Supongamos que los datos se leen del teclado a la memoria usando DataInputStream y se tarda 1 segundo en leer 1 carácter en la memoria y FileOutputStream escribe este carácter en el archivo al pasar otro 1 segundo.
  • Entonces, para leer y escribir un archivo tomará 200 segundos. Esto es perder mucho tiempo. Por otro lado, si se utilizan los clasificados en búfer, proporcionan un búfer que primero se llena con caracteres del búfer que se pueden escribir de inmediato en el archivo. Las clases almacenadas en búfer deben usarse en conexión con otras clases de flujo.
  • Primero, DataInputStream lee los datos del teclado dedicando 1 segundo a cada carácter. Este carácter se escribe en el búfer. Por lo tanto, para leer 100 caracteres en un búfer, tomará 100 segundos. Ahora FileOutputStream escribirá todo el búfer en un solo paso. Entonces, leer y escribir 100 caracteres tomó solo 101 segundos. De la misma manera, las clases de lectura se utilizan para mejorar la velocidad de la operación de lectura. Adjuntar FileOutputStream a BufferedOutputStream como:
    BufferedOutputStream bout=new BufferedOutputStream(fout,1024);

    Aquí, el tamaño del búfer se declara como 1024 bytes. Si no se especifica el tamaño del búfer, se utiliza un tamaño predeterminado de 512 bytes.

Métodos importantes de la clase BufferedOutputStream:

  • void flush() :  vacía este flujo de salida almacenado en búfer.
  • void write(byte[] b, int off, int len) :  Escribe len bytes desde la array de bytes especificada comenzando en el desplazamiento hacia este flujo de salida almacenado en búfer.
  • void write(int b) :  escribe el byte especificado en este flujo de salida almacenado en búfer.

Producción:

C:\> javac Create_File.java
C:\> java Create_File
Enter text (@ at the end):
This is a program to create a file
@

C:/> type file.txt
This is a program to create a file

Artículos relacionados:

Este artículo es una contribución de Nishant Sharma . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *