Sei sulla pagina 1di 7

ENTRADA Y SALIDA DE DATOS EN JAVA En Java se define la abstraccin de stream (flujo) para tratar la comunicacin de informacin entre el programa

y el exterior. Entre una fuente y un destino fluye una secuencia de datos. Los flujos actan como interfaz con el dispositivo o clase asociada. Operacin independiente del tipo de datos y del dispositivo Mayor flexibilidad (p.e. redireccin, combinacin) Diversidad de dispositivos (fichero, pantalla, teclado, red) Diversidad de formas de comunicacin Modo de acceso: secuencial, aleatorio Informacin intercambiada: binaria, caracteres, lneas System.in Instancia de la clase InputStream: flujo de bytes de entrada Metodos read() permite leer un byte de la entrada como entero skip(n ) ignora n bytes de la entrada available() nmero de bytes disponibles para leer en la entrada

System.out Instancia de la clase PrintStream: flujo de bytes de salida Metodos para impresin de datos print(), println() flush() vaca el buffer de salida escribiendo su contenido

System.err Funcionamiento similar a System.out Se utiliza para enviar mensajes de error (por ejemplo a un fichero de log o a la consola)

Entrada y Salida en Java


Una de las operaciones ms habituales que tiene que realizar un programa Java es intercambiar datos con el exterior. Para ello, el paquete java.io de J2SE incluye una serie de clases que permiten gestionar la entrada y salida de datos en un programa, independientemente de los dispositivos utilizados para el envi/recepcin de los datos. 1.El paquete de Salida es PrintStream. 2.El paquete de Entrada es InputStream, que deriva en BufferedReader e InputStreamReader.

Salida de Datos
El envi de datos al exterior se gestiona a travs de la clase PrintStream, utilizndose un objeto de la misma para acceder al dispositivo de salida. Posteriormente, con los mtodos proporcionados por esta clase, podemos enviar la informacin al exterior. El proceso de envi de datos a la salida debe realizarse siguiendo dos pasos: 1.- Obtencin del objeto PrintStream. Se debe crear un objeto PrintStream asociado al dispositivo de salida, la forma de hacerlo depender del dispositivo en cuestion. La clase System proporciona el atributo estatico out que contiene una referencia al objeto PrintStream asociado a la salida estndar, representada por la consola 2.- Envio de datos al stream. La clase PrintStream dispone de los metodos print() (String cadena) y println() (String cadena) para enviar una cadena de caracteres al dispositivo de salida, diferenciandose uno de otro en que el segundo aade un salto de linea al final de la cadena. Esto explica que para enviar un mensaje a la consola se use la expresin System.out.println(). Ambos mtodos se encuentran sobrecargados, es decir, existen varias versiones de los mismos para distintos tipos soportados por el lenguaje. En general, para enviar datos desde un programa Java al exterior habr que utilizar la expresin: objeto_printstream.println(dato); objeto_printstream.print(dato); siendo dato un valor de tipo String, int, float, double, char o boolean.

BUFFER
Java posee gran capacidad para el manejo de cadenas dentro de sus clases String y StringBuffer. Un objeto String representa una cadena alfanumrica

de un valor constante que no puede ser cambiada despus de haber sido creada. Un objeto StringBuffer representa una cadena cuyo tamao puede variar. La clase StringBuffer dispone de muchos mtodos para modificar el contenido de los objetos StringBuffer. Si el contenido de una cadena va a ser modificado en un programa, habr que sacrificar el uso de objetos String en beneficio de StringBuffer, que aunque consumen ms recursos del sistema, permiten ese tipo de manipulaciones. Al estar la mayora de las caractersticas de los StringBuffers basadas en su tamao variable, se necesita un nuevo mtodo de creacin: StringBuffer(); StringBuffer( int len ); StringBuffer( String str ); Se puede crear un StringBuffer vaco de cualquier longitud y tambin se puede utilizar un String como punto de partida para un StringBuffer. StringBuffer Dos = new StringBuffer( 20 ); StringBuffer Uno = new StringBuffer( "Hola Mundo" ); Cambio de Tamao El cambio de tamao de un StringBuffer necesita varias funciones especficas para manipular el tamao de las cadenas: int length(); char charAt( int index ); void getChars( int srcBegin,int srcEnd,char dst[],int dstBegin ); String toString(); void setLength( int newlength ); void setCharAt( int index,char ch ); int capacity(); void ensureCapacity( int minimum ); void copyWhenShared(); Obervar que una de las funciones devuelve una cadena constante normal de tipo String. Este objeto se puede usar con cualquier funcin String, como por ejemplo, en las funciones de comparacin. Modificacin del Contenido Para cambiar el contenido de un StringBuffer, se pueden utilizar dos mtodos: append() e insert().

En el ejemplo CadAppend.java, vemos el uso de estos dos mtodos: class CadAppend { public static void main( String args[] ) { StringBuffer str = new StringBuffer( "Hola" ); str.append( " Mundo" ); System.out.println( str ); } } En este otro ejemplo, CadInversa.java, mostramos un mtodo muy simple que le da la vuelta a una cadena: class CadInversa { public static String cadenaInversa( String fuente ) { int longitud = fuente.length(); StringBuffer destino = new StringBuffer( longitud ); for( int i=(longitud-1); i >= 0; i-- ) destino.append( fuente.charAt( i ) ); return( destino.toString() ); } public static void main( String args[] ) { System.out.println( cadenaInversa( "Hola Mundo" ) ); } }

ARCHIVOS EN JAVA (FICHEROS)


Creacin de un objeto File Para crear un objeto File nuevo, se puede utilizar cualquiera de los tres constructores siguientes: Constructores de la clase File public File(String pathname) ; public File(String parent, String child) ; public File(File parent, String child) ; public File(URI uri) ; ejemplo new File(/carpeta/archivo); new File(carpeta, archivo); new File(new File(/carpeta), archive) new File(new URI(str);

El constructor utilizado depende a menudo de otros objetos File necesarios para el acceso. Por ejemplo, si slo se utiliza un fichero en la aplicacin, el primer constructor es el mejor. Si en cambio, se utilizan muchos ficheros desde un mismo directorio, el segundo o tercer constructor sern ms cmodos. Y si el directorio o el fichero es una variable, el segundo constructor ser el ms til. Objetos FileInputStream La clase FileInputStream tpicamente representan ficheros de texto accedidos en orden secuencial, byte a byte. Con FileInputStream, se puede elegir acceder a un byte, varios bytes o al fichero completo. Apertura de un FileInputStream Para abrir un FileInputStream sobre un fichero, se le da al constructor un String o un objeto File: El ejemplo siguiente crea dos FileInputStreams que estn utilizando el mismo archivo de disco real. Cualquiera de los dos constructores disponibles en esta clase puede lanzar una FileNotFoundException. InputStream f1 = new FileInputStream("/archivo.txt"); File f = new file("/archive.txt"); InputStream f2 = new FileInputStream(f); FileInputStream fichero=new FileInputStream("/carpeta/archive.txt"); File fichero = new File( "/carpeta/archive.txt" ); FileInputStream ficheroSt= new FileInputStream( fichero );

Lectura de un FileInputStream Una vez abierto el FileInputStream, se puede leer de l. El mtodo read() tiene muchas opciones: int read(); Lee un byte y devuelve -1 al final del stream. int read( byte b[] ); Llena todo el array, si es posible. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream.

int read( byte b[],int offset,int longitud ); Lee longitud bytes en b comenzando por b[offset]. Devuelve el nmero de bytes ledos o -1 si se alcanz el final del stream. Cierre de FileInputStream Cuando se termina con un fichero, existen dos opciones para cerrarlo: explcitamente, o implcitamente cuando se recicla el objeto (el garbage collector se encarga de ello). Para cerrarlo explcitamente, se utiliza el mtodo close(): miFicheroSt.close(); Visualizacin de un fichero Si la configuracin de la seguridad de Java permite el acceso a ficheros, se puede ver el contenido de un fichero en un objeto JTextArea. El cdigo siguiente contiene los elementos necesarios para mostrar un fichero: FileInputStream fis; JTextArea ta; public void init() { byte b[] = new byte[1024]; int i; // El buffer de lectura se debe hacer lo suficientemente grande // o esperar a saber el tamao del fichero String s; try { fis = new FileInputStream( "/carpeta/archivo.txt"); } catch( FileNotFoundException e ) { } try {

i = fis.read( b ); } catch( IOException e ) { } s = new String( b,0 ); ta = new TextArea( s,5,40 ); add( ta ); }

Potrebbero piacerti anche