Clases para la gestión de Flujos (binarios)

Almacenan secuencias de código binario ilegible para las personas.

Ocupan menos espacio que los de carácter.

  • FileInputStream: para la lectura de datos.
  • FileOutputStream: para la escritura de datos

Constructors de FileInputStream

Constructors de FileOutputStream

Métodos de FileOutputStream

 

DATOS PRIMITIVOS. DataInputStream/ DataOutputStream

Para leer o escribir datos de tipos primitivos (int,long,float..) usaremos las clases DataInputStream y DataOutputStream con sus respectivos métodos

  • readBoolean (writeBoolean),
  • readByte (writeByte),
  • readInt (writeInt),
  • readUTF (writeUTF)

1.Abriremos el fichero,

2.Crearemos una variable del tipo FileInputStream/FileOutputStream

3.Creamos un objeto de la clase DataInputStream/DataOutputStream

Ejemplo:

File fich=new File(“FichEjemplo.dat”);
FileInputStream fins=new FileInputStream (fich);
DataInputStream datais= new DataInputStream (fins);

Ejemplo:

import java.io.*;
 
class FileIO{
public static void main(String [] args)
   throws FileNotFoundException, IOException{
 
   FileInputStream in = new FileInputStream("entrada.txt");
   FileOutputStream out = new FileOutputStream("salida.txt");
 
   int n=0,c;
   System.out.print ("\nCopiando ...");
   while( (c = in.read()) != -1){
      out.write(c);
      n++;
   }
   in.close();
   out.close();
   System.out.print ("\nSe han copiado "+n+" caracteres\n");
}}

 

Aunque leer y escribir bytes es útil, a menudo es necesario transmitir datos de tipos primitivos dentro de un flujo. Las clases DataInputStream y DataOutputStream proporcionan métodos para la lectura y escritura de tipos primitivos de un modo independiente de la máquina.

Así proporcionan los siguientes pares de métodos lectura/escritura:

  • readBoolean y writeBoolean,
  • readChar y writeChar,
  • readByte y writeByte,
  • readUnsignedByte y writeUnsignedByte,
  • readShort y writeShort,
  • readUnsignedShort y writeUnsignedShort,
  • readInt y writeInt,
  • readLong y writeLong,
  • readFloat y writeFloat,
  • readDouble y writeDouble,
  • readUTF y writeUTF (UTF es Unicode Transmition Format, que se utiliza para transmitir los caracteres de un String de 16 bits codificada en 8 bits.)

Además de estos métodos la clase DataInputStream proporciona varios métodos más:

  • void readFully(byte [] buf) lee bytes en buf. También existe la versión readFully(byte []buf, int offset, int count).
  • int skipBytes(int n) salta n bytes.
  • String readLine() lee un String hasta que se alcanza una \n un \r o un par \r\n. La secuencia final no es incluida en la cadena. Si se alzanza el final de la entrada se devuelve el null.

La clase DataOutputStream proporciona también un conjunto de métodos aparte de los dedicados a escribir los tipos primitivos. Proporciona signaturas equivalentes a los tres métodos write de la clase OutputStream y además los siguientes métodos:

  • void writeBytes(String s) escribe un String como una secuencia de bytes, perdiendo el byte superior de cada carácter.
  • void writeChars(String s) escribe un String como una secuencia de caracteres.

El siguiente ejemplo implementa un acumulador, que se incrementa en las cantidades que lee del teclado. Se utiliza el método readLine para leer hasta el final de la línea y almacenarlo en un String, que luego es tranformado en un entero utilizando el método parseInt de la clase Integer.

import java.io.*;
class Acumulador {
  public static void main( String[ ] args )
    throws IOException
  {
     DataInputStream input = new DataInputStream( System.in );
     String bufferIn;
     int valor, total = 0;
     System.out.print("\n["+total+"] ");
     while((bufferIn = input.readLine()) != null){
        valor = Integer.parseInt( bufferIn );
        total += valor;
        System.out.print("\n["+total+"] ");
     }
     System.out.println("\n["+total+"]\n");
  }
}

ACTIVIDAD 06 : Crea un programa Java MiCopy que copie un archivo. Por ejemplo “MiCopy FicheroOrigen.dat FicheroDestino.dat”. El programa tendrá que mostrar por pantalla el tanto por cien que lleva realizada de la copia y deberá también mostrar algún tipo de animación (similar a wget). Cuando termine la copia se mostrará un mensaje de fin de la copia.