E/S para Ficheros Binarios en Java

/* Se muestra ejemplo de construcción de un flujo para lectura de un fichero binario que contiene reales (double), cargarlo en memoria en un array, y su posterior volcado en un fichero de texto */

package primerosejemplosflujos;

import java.io.*;
import java.util.Scanner;

/*
 * @author RLR
 */

public class LeerReales {

 public static void main(String[] args) throws IOException 
 {

        Scanner miTeclado = new Scanner(System.in);

         //LEEMOS NOMBRE FICHERO BINARIO
        System.out.print("Intro. nombre fichero binario: ");
        String s = miTeclado.next();

      //CREAMOS FLUJO DE LECTURA
      File f = new File(s);              
      DataInputStream leer = null;

      double x,suma=0; 
      int num=0;

      //REALIZAMOS LECTURA DE FICHERO HASTA EL FINAL
      try
      {
        leer = new DataInputStream(new FileInputStream(f));        

        while(true)
        {         
         x=leer.readDouble();
         System.out.println("Otro double: " + x);
         num++;
         suma += x;         
        }  
      }
      catch(EOFException eof)
      {
          System.out.println("Hay " + num + " doubles en este fichero.");
          System.out.println("Su suma total vale: " + suma);
      }
      finally
      {
          leer.close();         
      }

      //TRANSFERIMOS EL CONTENIDO A UN ARRAY PARA TRABAJAR CON LOS DATOS

      double[] y=new double[num];
      int i=0;
      try
      {
        leer = new DataInputStream(new FileInputStream(f));        

        while(true)
        {         
         y[i++]=leer.readDouble();
         System.out.println("Otro double: " + y[i-1]);             
        }  
      }
      catch(EOFException eof)
      {          
          System.out.println("Final de transfer al array.");
      }
      finally
      {
          leer.close();         
      }

      //TRANSFERIMOS EL CONTENIDO A UN FICHERO DE TEXTO

      //LEEMOS NOMBRE FICHERO TEXTO
        System.out.print("Intro. nombre fichero texto: ");
        String s1 = miTeclado.next();

      //CREAMOS FLUJO DE ESCRITURA
      f = new File(s1);              
      PrintWriter escribir = null;

      //REALIZAMOS ESCRITURA EN FICHERO DEL ARRAY DE DOUBLES
      try
      {
        escribir = new PrintWriter(new FileWriter(f));   

        for(i=0;i<y.length;i++) 
        {
                escribir.println(y[i]);                
        }

      }
      catch(IOException e)
      {
            System.err.println("ERROR I/O EN FICHERO DE TEXTO.");
      }
      finally
      {
          escribir.println("Su suma total vale: " + suma);  
          escribir.close();
      }

  }

}
Esta entrada fue publicada en Ciencia y programación. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s