Ir a contenido principal

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. Cierta información de su perfil de developerWorks será mostrada públicamente, pero usted puede editar la información en cualquier momento. Su nombre, apellido (a menos que usted elija ocultarlo) y nombre de usuario acompañarán el contenido que usted publique.

Toda la información enviada es segura.

  • Cerrar [x]

La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

Toda la información enviada es segura.

  • Cerrar [x]

Introducción a la programación Java, parte 2: Construcciones para aplicaciones del mundo real

Funciones más avanzadas del lenguaje Java

J. Steven Perry, Consultor Director, Makoto Consulting Group, Inc.
J. Steven Perry
J. Steven Perry es desarrollador de software, arquitecto y fanático general de Java que ha estado desarrollando software profesionalmente desde 1991. Sus intereses profesionales abarcan desde el funcionamiento interno de la JVM hasta el modelo UML y todo lo que está en el medio. Steve tiene una pasión por escribir y ser mentor. Es el autor de Java Management Extensions (O'Reilly), Log4j (O'Reilly) y los artículos de developerWorks de IBM "Joda-Time" y OpenID for Java Web applications". Pasa tiempo libre con sus tres hijos, anda en bicicleta y enseña yoga.

Resumen:  En la Parte 1 de este tutorial, el programador Java™ profesional J. Steven Perry presentó la sintaxis del lenguaje Java y las bibliotecas que usted necesita para escribir aplicaciones Java simples. La Parte 2, todavía orientada a desarrolladores nuevos en el desarrollo de aplicaciones Java, presenta las construcciones de programación más sofisticadas requeridas para crear complejas aplicaciones Java del mundo real. Los temas que se cubren incluyen manejo de excepciones, herencia y abstracción, expresiones regulares, genéricos, E/S Java y serialización Java.

Ver más contenido de esta serie

Fecha:  10-12-2012
Nivel:  Introductoria PDF:  A4 and Letter (927 KB | 54 páginas)Get Adobe® Reader®

Comentario:  

E/S

Esta sección es una visión general del paquete java.io. Aprenderá a usar algunas de sus herramientas para recolectar y manipular datos de una variedad de orígenes.

Trabajo con datos externos

En mucha ocasiones, los datos que usted usa en sus programas Java vendrán de un origen de datos externo, tales como una base de datos, una transferencia directa de bytes por un socket o un almacenamiento de archivos. El lenguaje Java le da muchas herramientas para conseguir información de estos orígenes y la mayoría de ellas están ubicadas en el paquete java.io.


Archivos

De todos los orígenes de datos disponibles para sus aplicaciones Java, los archivos son los más comunes y, con frecuencia, los más convenientes. Si usted quiere leer un archivo en su aplicación Java, debe usar streams que analicen sus bytes entrantes en los tipos de lenguaje Java.

java.io.File es una clase que define un recurso en su sistema de archivos y representa ese recurso en un modo abstracto. Crear un objeto File es fácil:

File f = new File("temp.txt");
File f2 = new File("/home/steve/testFile.txt");

El constructor File toma el nombre del archivo que creará. La primera llamada crea un archivo llamado temp.txt en el directorio dado. La segunda llamada crea un archivo en una ubicación específica en mi sistema Linux. Usted puede pasar cualquier String al constructor del File, siempre y cuando sea un nombre de archivo válido para su OS, ya sea que el archivo al que hace referencia incluso exista o no.

Este código le pregunta al objeto File recientemente creado si el archivo existe:

File f2 = new File("/home/steve/testFile.txt");
if (f2.exists()) {
 // File exists. Procesarlo...
} else {
 // File doesn't exist. Crearlo...
 f2.createNewFile();
}

java.io.File tiene otros métodos útiles que puede usar para suprimir archivos, crear directorios (al pasar el nombre de un directorio como el argumento al constructor del File), determinar si un recurso es un archivo, directorio o enlace simbólico, y más.

La acción real de E/S de Java está en la escritura a y lectura de los orígenes de datos, que es donde entran las secuencias.


Uso de secuencias en E/S de Java

Puede acceder a archivos en el sistema de archivos con el uso de secuencias. En el nivel más bajo, las secuencias le permiten a un programa recibir bytes de un origen o enviar salidas a un destino. Algunas secuencias manejan todo tipo de caracteres de 16 bits (tipos de Reader y Writer). Otras manejan solo bytes de 8 bits (tipos de InputStream y OutputStream). Dentro de estas jerarquías hay varios sabores de secuencias, que se encuentran todos en el paquete java.io. En el nivel más alto de abstracción están las secuencias de caracteres y secuencias de bytes.

Las secuencias de bytes leen (InputStream y subclases) y escriben (OutputStream y subclases) bytes de 8 bits. En otras palabras, una secuencia de bytes puede considerarse un tipo más crudo de secuencia. Aquí hay un resumen de dos secuencias de bytes comunes y su uso:

  • FileInputStream/FileOutputStream: Lee bytes desde un archivo, escribe bytes para un archivo.
  • ByteArrayInputStream/ByteArrayOutputStream: Lee bytes desde una matriz en memoria, escribe bytes para una matriz en memoria.

Secuencias de caracteres

Las secuencias de caracteres leen (Reader y sus subclases) y escriben (Writer y sus subclases) caracteres de 16 bits. Aquí hay un listado seleccionado de secuencias de caracteres y sus usos:

  • StringReader/StringWriter: Lee y escribe caracteres para y desde Strings en memoria.
  • InputStreamReader/InputStreamWriter (y subclases FileReader/FileWriter): Forma un puente entre secuencias de bytes y secuencias de caracteres. Los sabores del Reader leen bytes desde una secuencia de bytes y los convierte en caracteres. Los sabores del Writer convierten los caracteres en bytes para ponerlos en secuencias de bytes.
  • BufferedReader/BufferedWriter: Almacenan datos mientras leen o escriben otra secuencia, lo cual hace que las operaciones de leer y escribir sean más eficientes.

En lugar de intentar cubrir secuencias en su totalidad, me centraré en las secuencias recomendadas para leer y escribir archivos. En la mayoría de los casos, estas son secuencias de caracteres.

Lectura desde un File

Hay varios modos de leer desde un File. Podría decirse que el abordaje más simple es:

  1. Crear un InputStreamReader en el File del cual usted quiere leer.
  2. Llamar a read() para leer un carácter por vez hasta que llegue al final del archivo.

El Listado 25 es un ejemplo de la lectura desde un File:


Listado 25. Lectura desde un File

Logger log = Logger.getAnonymousLogger();
StringBuilder sb = new StringBuilder();
try {
 InputStream inputStream = new FileInputStream(new File("input.txt"));
 InputStreamReader reader = new InputStreamReader(inputStream);
 try {
   int c = reader.read();
   while (c != -1) {
     sb.append(c);
   }
 } finally {
 reader.close();
 }
} catch (IOException e) {
 log.info("Caught exception while processing file: " + e.getMessage());
}

Escritura para un File

Como con la lectura desde un File, hay varios modos para escribir para un File. Una vez más, elegiré el abordaje más simple:

  1. Crear un FileOutputStream en el File para el cual usted quiere escribir.
  2. Llamar a write() para escribir la secuencia de caracteres.

El Listado 26 es un ejemplo de la escritura para un File:


Listado 26. Escritura para un File

Logger log = Logger.getAnonymousLogger();
StringBuilder sb = getStringToWriteSomehow();
try {
 OutputStream outputStream = new FileOutputStream(new File("output.txt"));
 OutputStreamWriter writer = new OutputStreamWriter(outputStream);
 try {
   writer.write(sb.toString());
 } finally {
   writer.close();
 }
} catch (IOException e) {
 log.info("Caught exception while processing file: " + e.getMessage());
}

Almacenamiento intermedio de secuencias

Leer y escribir secuencias de caracteres de un carácter por vez no es exactamente eficiente, por lo tanto, en la mayoría de los casos, usted probablemente quiera, en cambio, usar E/S almacenado. Para leer desde un archivo usando E/S almacenado, el código se parece exactamente como el Listado 25, con la excepción de que se envuelve el InputStreamReader en un BufferedReader, como se muestra en el Listado 27:


Listado 27. Leer desde un File con E/S almacenado

Logger log = Logger.getAnonymousLogger();
StringBuilder sb = new StringBuilder();
try {
 InputStream inputStream = new FileInputStream(new File("input.txt"));
 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
 try {
   String line = reader.readLine();
   while (line != null) {
     sb.append(line);
     line = reader.readLine();
   }
 } finally {
 reader.close();
 }
} catch (IOException e) {
 log.info("Caught exception while processing file: " + e.getMessage());
}

Escribir para un archivo usando el E/S almacenado es lo mismo: solo se envuelve el OutputStreamWriter en un BufferedWriter, como se muestra en el Listado 28.


Listado 28. Escribir para un File con E/S almacenado

Logger log = Logger.getAnonymousLogger();
StringBuilder sb = getStringToWriteSomehow();
try {
 OutputStream outputStream = new FileOutputStream(new File("output.txt"));
 BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
 try {
   writer.write(sb.toString());
 } finally {
   writer.close();
 }
} catch (IOException e) {
 log.info("Caught exception while processing file: " + e.getMessage());
}

Apenas he rozado la superficie de lo que es posible con esta biblioteca Java esencial. Por su cuenta, intente aplicar lo que ha aprendido sobre los archivos a otros orígenes de datos.

10 de 14 | Anterior | Siguiente

Comentario



static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=tecnologia Java
ArticleID=850709
TutorialTitle=Introducción a la programación Java, parte 2: Construcciones para aplicaciones del mundo real
publish-date=12102012
author1-email=steve.perry@makotoconsulting.com
author1-email-cc=