programación en java - ingeniería de sistemas y automática

Anuncio
Escuela Politécnica Superior de Elche
Ingeniería Industrial
SISTEMAS INFORMÁTICOS INDUSTRIALES
curso 2006-2007
PROGRAMACIÓN EN JAVA
PRÁCTICA 1: Entrada y salida de datos en Java
Objetivos
•
•
Familiarizarse con el entorno de desarrollo JDK de Sun para crear aplicaciones en
Java
Conocer las clases de Java relacionadas con la entrada y salida de datos
Descripción
Realizar una aplicación en Java que:
1) Lea una cadena de caracteres por teclado.
2) Obtenga las palabras (tokens) que forman parte de la cadena.
3) Muestre por pantalla y guarde en un fichero los tokens ordenados alfabéticamente.
Ejemplo:
Ejecución del programa
Introduzca la cadena:
esto es una cadena de prueba que debe ordenarse
Tokens ordenados:
cadena
de
debe
es
esto
ordenarse
prueba
que
una
Fichero generado
cadena
de
debe
es
esto
ordenarse
prueba
que
una
Desarrollo
1) Se debe crear un fichero Java denominado Practica1.java. En dicho fichero se
implementará la clase Practica1 que contendrá el main().
2) Para leer una cadena de caracteres desde teclado en Java se puede proceder del
siguiente modo:
Página 1 de 4
Escuela Politécnica Superior de Elche
Ingeniería Industrial
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String cadena = br.readLine();
En Java la manera de representar las entradas y las salidas es a base de streams
(flujos de datos). Un stream es una conexión entre el programa y la fuente o destino
de los datos. La información se traslada en serie a través de esta conexión. Todas las
clases de Java relacionadas con la entrada y salida se agrupan en el package java.io.
Hay 4 jerarquía de clases relacionadas con la entrada y salida de datos:
-
Las clases derivadas de InputStream (para lectura) y de OutputStream (para
escritura). Estas clases manejan streams de bytes.
Las clases derivadas de Reader y Writer, que manejan caracteres en vez de
bytes.
InputStreamReader es una clase derivada de Reader que convierte los streams de
bytes a streams de caracteres, es decir, lee bytes y los convierte en caracteres.
System.in es el objeto de la clase InputStream para recibir datos desde la entrada
estándar del sistema (el teclado). De esta forma, el objeto isr es un stream que
convierte los bytes leídos desde teclado en caracteres.
La clase BufferedReader deriva de la clase Reader. Esta clase añade un buffer para
realizar una lectura eficiente de caracteres. Dispone del método readLine que
permite leer una línea de texto y devolverla como String.
3) Una vez que se ha leído la cadena de caracteres el siguiente paso es separarla en las
palabras que la forman (tokens). Para ello se puede utilizar la clase
StringTokenizer perteneciente al package java.util. Por ejemplo, para mostrar
todos los tokens de un String denominado cadena se procedería del siguiente modo:
StringTokenizer st = new StringTokenizer(cadena);
while(st.hasMoreTokens()){
System.out.println(st.nextToken());
}
El método int countTokens() devuelve el número de tokens que se pueden extraer
de la frase.
4) Los tokens de la cadena de caracteres leída, deben ser almacenados en un vector de
Strings. Dicho vector deberá ser ordenado alfabéticamente, para ello puede utilizarse
al algoritmo de ordenación de intercambio directo (algoritmo de la burbuja). A
continuación se muestra dicho algoritmo en pseudocódigo para el caso de que se
quiera ordenar un vector de números reales:
Página 2 de 4
Escuela Politécnica Superior de Elche
Ingeniería Industrial
ALGORITMO burbuja
variables enteras i,j,N
vector de reales v
para i=1 hasta N-1
para j=N-1 hasta i
si (v[j-1] > v[j])
intercambiar v[j-1] y v[j]
fsi
fpara
fpara
FIN ALGORITMO
Para ordenar alfabéticamente Strings debe utilizarse el método int
compareTo(String). P.ej. cad1.compareTo(cad2) devuelve un entero positivo si
cad1 > cad2, un entero negativo si cad1 < cad2, y 0 si son iguales.
5) Por último deben mostrarse los tokens ordenados en pantalla y guardarlos en un
fichero denominado archivo.txt. Para escribir una cadena de texto en un fichero se
puede proceder del siguiente modo:
FileWriter fw = new FileWriter(“archivo.txt”);
BufferedWriter bw = new BufferedWriter(fw);
PrintWriter salida = new PrintWriter(bw);
salida.println(“texto que se guardara en el fichero”);
salida.close();
La clase FileWriter deriva de Writer y permite escribir caracteres en un
fichero.
La clase BufferedWriter también deriva de la clase Writer. Esta clase añade un
buffer para realizar una escritura eficiente de caracteres.
La clase PrintWriter, que también deriva de Writer, permite escribir de forma
sencilla en un archivo de texto, ya que posee los métodos print y println,
idénticos a los de System.out. El método close() cierra el stream.
Observaciones
•
•
En operaciones de entrada y salida de datos debe capturarse la excepción
IOException.
Se recomienda estructurar la aplicación en métodos.
Página 3 de 4
Escuela Politécnica Superior de Elche
Ingeniería Industrial
Jerarquía de clases para lectura y escritura de datos
PrintWriter
Página 4 de 4
Descargar