ENTRADA Y SALIDA DE DATOS EN JAVA

7

Click here to load reader

description

Un flujo de entrada / salida (I/O stream, Input / Output stream) representa una fuente desde la cual se reciben datos o un destino hacia el cual se envían datos. Un flujo de datos puede provenir o dirigirse hacia archivos en disco, dispositivos de comunicaciones, otros programas o arreglos en memoria. Los datos pueden ser bytes, tipos primitivos, caracteres propios de un idioma local, u objetos. Los flujos pueden simplemente transferir datos sin modificación o manipular esos datos para transformarlos de diversas maneras como parte del proceso de transferencia. Sea cual sea el tipo de datos, un flujo se presenta como una secuencia de datos. Un flujo de entrada (input stream) lee datos de una fuente, un item por vez. Un flujo de salida (output stream) escribe datos en un destino, un item por vez.

Transcript of ENTRADA Y SALIDA DE DATOS EN JAVA

Page 1: ENTRADA Y SALIDA DE DATOS EN JAVA

Entrada / Salida Entrada / Salida con Java con Java

Page 2: ENTRADA Y SALIDA DE DATOS EN JAVA

IntroducciónIntroducciónLa mayoría de los programas no pueden alcanzar sus metas La mayoría de los programas no pueden alcanzar sus metas sin acceder a datos externos. Estos datos se recuperan a sin acceder a datos externos. Estos datos se recuperan a partir de un origen de entrada. Los resultados de un partir de un origen de entrada. Los resultados de un programa se envían a un destino de salida. La noción programa se envían a un destino de salida. La noción genérica de una fuente de entrada puede representar genérica de una fuente de entrada puede representar muchos tipos de entrada distintos: desde un archivo de muchos tipos de entrada distintos: desde un archivo de disco, un teclado o un conector (socket) de red. Estas disco, un teclado o un conector (socket) de red. Estas abstracciones son una manera limpia de tratar la E/S sin abstracciones son una manera limpia de tratar la E/S sin necesitar que todo el código comprenda la diferencia entre necesitar que todo el código comprenda la diferencia entre un teclado y una red. un teclado y una red. Java llama flujo a esta abstracción y la implementa con Java llama flujo a esta abstracción y la implementa con varias clases del paquete java.io. El flujo de E/S representa varias clases del paquete java.io. El flujo de E/S representa todos los orígenes y destinos de los datos detrás de una todos los orígenes y destinos de los datos detrás de una interfaz uniforme. La entrada está encapsulada en la clase interfaz uniforme. La entrada está encapsulada en la clase InputStream y la salida en la clase OutputStream. Estas dos InputStream y la salida en la clase OutputStream. Estas dos clases abstractas son las que todos los objetos deberían clases abstractas son las que todos los objetos deberían referenciar cuando tratan la E/S en general. referenciar cuando tratan la E/S en general.

Page 3: ENTRADA Y SALIDA DE DATOS EN JAVA

FileFile

Un File es el único objeto del paquete de E/S que referencia a un Un File es el único objeto del paquete de E/S que referencia a un archivo de disco real. La clase File no especifica cómo se recupera archivo de disco real. La clase File no especifica cómo se recupera o almacena la información en los archivos; sólo describe las o almacena la información en los archivos; sólo describe las propiedades de un objeto archivo. Los archivos son un origen y un propiedades de un objeto archivo. Los archivos son un origen y un destino primario de los datos dentro de la mayoría de los destino primario de los datos dentro de la mayoría de los programas. A pesar de que se les imponente restricciones severas programas. A pesar de que se les imponente restricciones severas cuando se utilizan dentro de applets, los archivos siguen siendo un cuando se utilizan dentro de applets, los archivos siguen siendo un recurso básico para almacenar información persistente y recurso básico para almacenar información persistente y compartida. compartida. Los objetos archivo se pueden crear utilizando uno de los tres Los objetos archivo se pueden crear utilizando uno de los tres constructores disponibles. El ejemplo siguiente crea tres archivo: constructores disponibles. El ejemplo siguiente crea tres archivo: f1, f2 y f3. El primer objeto File se construye utilizando un trayecto f1, f2 y f3. El primer objeto File se construye utilizando un trayecto de directorio como único argumento. El segundo se crea utilizando de directorio como único argumento. El segundo se crea utilizando dos argumentos, el trayecto y el nombre de archivo. El tercero se dos argumentos, el trayecto y el nombre de archivo. El tercero se crea utilizando el trayecto de archivo asignado a f1 y un nombre crea utilizando el trayecto de archivo asignado a f1 y un nombre de archivo; f3 refiere al mismo archivo que f2. de archivo; f3 refiere al mismo archivo que f2. File f1 = new File("/");File f1 = new File("/");File f2 = new File("/","autoexec.bat");File f2 = new File("/","autoexec.bat");File f3 = new File(f1, "autoexec.bat"); File f3 = new File(f1, "autoexec.bat");

Page 4: ENTRADA Y SALIDA DE DATOS EN JAVA

InputStreamInputStream InputStream es una clase abstracta que define el modelo de Java para el flujo de entrada. Todos los InputStream es una clase abstracta que define el modelo de Java para el flujo de entrada. Todos los métodos de esta clase lanzarán una IOException si se producen condiciones de error. Este es un métodos de esta clase lanzarán una IOException si se producen condiciones de error. Este es un breve resumen de los métodos de InputStream: breve resumen de los métodos de InputStream: read()read() devuelve una representación como entero del siguiente byte de entrada disponible. devuelve una representación como entero del siguiente byte de entrada disponible.

read(byte[])read(byte[]) intenta leer hasta b.length bytes situándolos en b y devuelve el número real de bytes intenta leer hasta b.length bytes situándolos en b y devuelve el número real de bytes que se leyeron con éxito.que se leyeron con éxito.

read(byte b[], int off, int len)read(byte b[], int off, int len) intenta leer hasta len bytes situándolos en b comenzando en intenta leer hasta len bytes situándolos en b comenzando en b[off], y devuelve el número de bytes que se leyeron con éxito.b[off], y devuelve el número de bytes que se leyeron con éxito.

skip(long n)skip(long n) omite n bytes de la entrada, y devuelve el número de bytes que se han omitido. omite n bytes de la entrada, y devuelve el número de bytes que se han omitido.

available()available() devuelve el número de bytes de entrada disponibles actualmente para su lectura. devuelve el número de bytes de entrada disponibles actualmente para su lectura.

close()close() cierra el origen de entrada. Los intentos de lectura posteriores generarán una IOException. cierra el origen de entrada. Los intentos de lectura posteriores generarán una IOException.

mark(int limitelectura)mark(int limitelectura) coloca una marca en el punto actual del flujo de entrada que seguirá coloca una marca en el punto actual del flujo de entrada que seguirá siendo válida hasta que se lean limitelectura bytes.siendo válida hasta que se lean limitelectura bytes.

reset()reset() devuelve el puntero de entrada ala marca establecida previamente. devuelve el puntero de entrada ala marca establecida previamente.

markSupported()markSupported() devuelve true si se admiten mark/reset en este flujo. devuelve true si se admiten mark/reset en este flujo.

Page 5: ENTRADA Y SALIDA DE DATOS EN JAVA

OutputStreamOutputStream

Igual que InputStream, OutputStream es una clase abstracta que Igual que InputStream, OutputStream es una clase abstracta que define el flujo de salida. Todos los métodos de esta clase define el flujo de salida. Todos los métodos de esta clase devuelven un valor void y lanzan una IOException en caso de devuelven un valor void y lanzan una IOException en caso de error. Esta es una lista de los métodos de OutputStream: error. Esta es una lista de los métodos de OutputStream: write(int b)write(int b) escribe un único byte en un flujo de salida. Observar escribe un único byte en un flujo de salida. Observar que el parámetro en un int, lo que permite que se llame a write que el parámetro en un int, lo que permite que se llame a write con expresiones sin tener que convertir su tipo a byte.con expresiones sin tener que convertir su tipo a byte.

write(byte b[])write(byte b[]) escribe una matriz completa de bytes en un flujo escribe una matriz completa de bytes en un flujo de salida.de salida.

write(byte b[], int off, int len)write(byte b[], int off, int len) escribe len bytes de la matriz b, escribe len bytes de la matriz b, comenzando a partir de b[off].comenzando a partir de b[off].

flush()flush() inicializa el estado de la salida de manera que se limpian inicializa el estado de la salida de manera que se limpian todos los buffers.todos los buffers.

close()close() cierra el flujo de salida. Los intentos de escritura cierra el flujo de salida. Los intentos de escritura posteriores generarán una IOException. posteriores generarán una IOException.

Page 6: ENTRADA Y SALIDA DE DATOS EN JAVA

Ejemplo de código fuente en JAVAEjemplo de código fuente en JAVApublic class devoir_1 {public class devoir_1 {public static void main (String[ ] args) {public static void main (String[ ] args) {{{double A, B, C, x1, x2;double A, B, C, x1, x2;Terminal.escribirStringln ("Ingrese a : ");Terminal.escribirStringln ("Ingrese a : ");A=Terminal.leerDouble( ) ;A=Terminal.leerDouble( ) ;Terminal.escribirStringln (" Ingrese b : ");Terminal.escribirStringln (" Ingrese b : ");B=Terminal.leerDouble( ) ;B=Terminal.leerDouble( ) ;Terminal.escribirStringln (" Ingrese c : ");Terminal.escribirStringln (" Ingrese c : ");C=Terminal.leerDouble( ) ; C=Terminal.leerDouble( ) ; if (A==0, B==0, C==0) // da error aquíif (A==0, B==0, C==0) // da error aquí{Terminal.escribirStringln ("x puede tomar cualquier valor")}{Terminal.escribirStringln ("x puede tomar cualquier valor")}elseelse{if (A==0, B==0, C != 0) ;{if (A==0, B==0, C != 0) ;Terminal.escribirStringln ("no hay solucion posible")Terminal.escribirStringln ("no hay solucion posible")elseelse{if (A==0, B != 0);{if (A==0, B != 0);{x1==x2== - C/B}{x1==x2== - C/B}elseelse{double d = (B*B – (4*A*C)); // da error aquí{double d = (B*B – (4*A*C)); // da error aquíif (d > 0);if (d > 0);{x1= ((-B + Math.sqrt (d))/(2*A));{x1= ((-B + Math.sqrt (d))/(2*A));x2= ((-B - Math.sqrt (d))/(2*A)) }x2= ((-B - Math.sqrt (d))/(2*A)) }elseelse{if (d==0);{if (d==0);{x1=x2= - B/ (2*A) }{x1=x2= - B/ (2*A) }elseelse{d=Math.abs(d); {d=Math.abs(d); x1= ((-B + Math.sqrt (d))/(2*A));x1= ((-B + Math.sqrt (d))/(2*A));x2= ((-B - Math.sqrt (d))/(2*A))}}}}}x2= ((-B - Math.sqrt (d))/(2*A))}}}}}Terminal.escribirStringln ("x1 = " + x1) ;Terminal.escribirStringln ("x1 = " + x1) ;Terminal.escribirStringln ("x2 = " + x2) ;Terminal.escribirStringln ("x2 = " + x2) ;} } } } } }

Page 7: ENTRADA Y SALIDA DE DATOS EN JAVA

CORRIDA DEL PROGRAMACORRIDA DEL PROGRAMA