propiedades del sistema la clase properties streams consola i/o entrada y salida archivos: file...
TRANSCRIPT
Propiedades del Sistema La clase Properties Streams Consola I/O Entrada y Salida Archivos: File Colecciones Iteradores Maps
Las propiedades del sistema es una característica que reemplaza el concepto de variables de entorno (que son específicos de la plataforma)
El método System.getProperties retorna el objeto Properties.
El método getProperty retorna un String que representa el valor de la propiedad con dicho nombre
Usar la opción -D para incluir una nueva propiedad
La clase Properties implementa un mapeo de nombre a valor.
El método propertyNames retorna un Enumeration de todos los nombres de las propiedades.
Se puede leer o escribir una colección de properties a un archivo utilizando load y store.
La mayoría de los programas trabajan con datos externos almacenados en archivos locales o provenientes de otras máquinas de la red
Java trabaja con el concepto de streams de datos
Abstraen el concepto de intercambio de información entre varios dispositivos y provee una interfaz consistente para interactuar con las diferentes fuentes de E/S.
Luego de que los datos físicos se mapean a un stream, un programa Java puede leer los datos de ese stream de forma serial (de a byte, de a char, etc.)
Algunos tipos de streams son los streams de bytes (InputStream, OutputStream) y de caracteres (Reader and Writer).
El mismo archivo físico puede ser leído utilizando distintos tipos de streams, por ejemplo FileInputStream, or FileReader.
Al trabajar con un stream, se debería:
₋ Abrir el stream que apunte a una fuente de datos específica: un archivo, un socket, URL, etc.
₋ Leer o escribir datos desde/a el stream₋ Cerrar el stream
El System.out le permite escribir a la “salida estándar”₋ Es un objeto de tipo PrintStream.
El System.in le permite leer de la “entrada estándar”₋ Es un objeto de tipo InputStream.
El System.err le permite escribir a la “error estándar”₋ Es un objeto de tipo PrintStream.
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);try {
String linea = br.readLine();} catch (IOException e) {// TODO Auto-generated catch block
e.printStackTrace();}
El método println imprime el argumento y baja de línea(\n)
El método print imprime el argumento sin la línea nueva (\n)
Los métodos print y println son sobrecargados para los tipos primitivos (boolean, char, int, long,float, and double) y para char[], Object y String.
Crear objetos File
Manipular objetos File
Leer y escribir de archivo
try { File file = new File("filename"); // Crear el archivo si no existe boolean success = file.createNewFile(); if (success) { // El archivo no existía y fue creado } else { // El archivo ya existía } } catch (IOException e) { }
File names:₋ String getName()₋ String getPath()₋ String getAbsolutePath()₋ String getParent()₋ boolean renameTo(File newName)
File tests:₋ boolean exists()₋ boolean canWrite()₋ boolean canRead()₋ boolean isFile()₋ boolean isDirectory()₋ boolean isAbsolute();
File input:₋ Use la clase FileReader para leer caracteres₋ Use la clase BufferedReader para utilizar el método
readLine
File output:₋ Use la clase FileWriter para escribir caracteres ₋ Use la clase PrintWriter para utilizar los métodos print y
println
File input:
FileReader fr = new FileReader("filename");BufferedReader br = new BufferedReader(fr);String line = br.readLine();fr.close();
File output:
File file = new File("filename");PrintStream print = new PrintStream(file);
print.println("Hola Mundo"); print.close();
Properties prop = new Properties();InputStream is = null;try {
is = new FileInputStream("d:\fichero.properties");prop.load(is);
} catch (IOException ioe) {}
for (Enumeration e = prop.keys(); e.hasMoreElements() ; ) { // Obtenemos el objeto Object obj = e.nextElement(); System.out.println(obj + ": " +
prop.getProperty(obj.toString()));}
Java provee un framework que permite trabajar con colecciones de objetos
Una colección permite que varios objetos sean tratados como una unidad
Los objetos pueden ser almacenados, recuperados y manipulados como elementos en una colección
Este framework se encuentra en el paquete java.util
Hay ciertas operaciones básicas en las que vamos a usar colecciones:
₋ Agregar objetos a una colección
₋ Eliminar objetos de una colección
₋ Chequear si uno o un grupo de objetos pertenece a determinada colección
₋ Poder obtener objetos de una colección
₋ Recorrer una colección, obteniendo cada uno de los objetos almacenados
Comprende las siguientes partes:
₋ Interfaces que permiten manipular colecciones independientemente de su implementación
₋ Un pequeño grupo de implementaciones
₋ Clases que proveen utilidades para operar sobre colecciones como ordenamiento, búsqueda, etc.
Collection ₋ Interfaz básica que define las operaciones
normales que permiten mantener y manipular un grupo de objetos
Set ₋ Extiende Collection para representar un conjunto
de elementos únicos
Sorted Set₋ Extiende Set para agregar funcionalidades para
mantener un conjunto de elementos de forma ordenada
List₋ Extiende Collection para mantener una
secuencia de elementos que no tienen que ser únicos
Map₋ Interfaz básica que define operaciones para
mantener mapeos entre claves y valores
SortedMap ₋ Extiende Map para mantener los elementos en
orden
int size()
boolean isEmpty()
boolean contains(Object element)
boolean add(Object element)
boolean remove(Object element)
boolean containsAll(Collection c)
boolean addAll(Collection c)
boolean removeAll(Collection c)
boolean retainAll(Collection c)
void clear()
Las colecciones proveen un iterador que permiten acceso secuencial a los elementos
Se puede obtener un iterador invocando al siguiente método definido en la interfaz Collection:
₋ Iterator iterator()₋ Retorna un objeto que implementa la interfaz
Iterator
Métodos:₋ boolean hasNext()₋ Object next()₋ Object remove()
Un Iterator de un Set es desordenado
Un ListIterator de un List puede recorrer la lista en ambos sentidos, utilizando next o previous:
List list = new ArrayList();// add some elements
Iterator elements = list.iterator(); while ( elements.hasNext() ) { System.out.println(elements.next());
}
El paquete java.util provee implementaciones basadas en las interfaces principales
Agrega clases abstractas que son las bases sobre las cuales se implementan las clases concretas
No admiten duplicados
Puede contener a lo sumo un valor null
La interfaz Set no agrega operaciones₋ HashSet implementa Set₋ Utiliza una tabla de hash₋ No garantiza orden de los elementos₋ LinkedHashSet subclase de HashSet garantiza
orden de inserción
Admiten duplicados y mantienen sus elementos en orden
Cada elemento ocupa una posición en la lista cuya numeración comienza en cero
Agrega operaciones para trabajar especificamente con listas
Agregan un iterador particular para iterar sobre listas en ambas direcciones
Se proveen 3 implementaciones de List:ArrayList, LinkedList y Vector
Definen mapeos clave valor
Al par <clave, valor> se le llama entrada
No admiten claves duplicadas
Cada clave se mapea a un único valor
Las claves y valores tienen que ser objetos, los tipos primitivos deben ser envueltos en sus clases wrapper
El Map no es una colección (no extiende Collection)
Operaciones básicas₋ Object put(Object key)₋ Object get(Object key)₋ Object remove(Object key)₋ boolean containsKey(Object key)₋ boolean containsValue(Object value)₋ int size()₋ boolean isEmpty()
Implementaciones de Map:₋ HashMap, LinkedHashMap, HashTable
Sets y Maps tienen interfaces especiales para implementaciones que ordenan sus elementos de acuerdo a un orden específico
Los objetos pueden especificar su orden natural implementando la interfaz Comparable o de acuerdo a un orden total a través de un objeto comparador que implemente la interfaz Comparator
Implementaciones: TreeSet y TreeMap
Comparator
₋ El control de la ordenación se puede lograr creando un objeto comparador que imponga el orden total de los elementos de una colección
₋ La interfaz tiene un único método:₋ int compare(Object o1, Object o2)
Comparable
₋ Una clase puede definir el orden natural de sus instancias implementando esta interfaz
₋ Muchas clases de la API de Java como los wrappers, String, Date, etc, implementan esta interfaz.
₋ Único método:₋ int compareTo(Object o)
Vector implements la interface List.
Stack es una subclase de Vector y soporta los métodos push, pop y peek.
Hashtable implements la interface Map.
Enumeration es una variación de la interface Iterator:₋ Un enumeration es retornado por el método
elements de Vector, Stack y Hashtable
Esas clases son thread-safe, y debido a eso, “pesadas.”
Propiedades del Sistema La clase Properties Streams Consola I/O Entrada y Salida Archivos: File Colecciones Iteradores Maps
Thinking in Java₋ Bruce Eckel
The Java Tutorial₋ http://download.oracle.com/javase/tutorial/ SCJP₋ Kathy Sierra – Cap. 7 – Generics and Collections