Download Entrada de datos - Departamento de Computación

Document related concepts
no text concepts found
Transcript
Entrada de datos
Desde teclado
1. Importar el paquete java.io
2. Crear un objeto BufferedReader, pasando como parámetro al constructor un objeto
InputStreamReader. Por ejemplo:
BufferedReader t = new BufferedReader(new InputStreamReader(System.in));
3. Usar el método String readLine()para leer el dato. El ingreso del dato desde teclado
debe finalizar con la tecla ENTER. Por ejemplo:
String s = t.readLine()
4. Si el valor leído desde teclado, se requiere almacenar en una variable de un tipo diferente a
String, se debe realizar la conversión de tipo utilizando algún método apropiado para ello.
Por ejemplo:
•
para leer un dato int
int x = Integer.parseInt(s.trim()); ó
int x = Integer.parseInt(t.readLine().trim());
•
para leer un dato double
double d = new Double(s).doubleValue(); ó
double d = new Double(t.readLine()).doubleValue(); ó
double d = Double.parseDouble(s.trim()); ó
double d = Double.parseDouble(t.readLine().trim());
•
para leer un dato char
char c = s.charAt(0); ó
char c = t.readLine().charAt(0);
2
Desde un archivo secuencial
1. Importar los paquetes java.io y java.util
2. Crear un objeto File. (Se recomienda revisar la clase File y observar todos los métodos
disponibles en ella, especialmente los constructores). Por ejemplo:
File f = new File("u:\\compAvanz12005\\unidad2\\datos.dat");
3. Crear un objeto BufferedReader, pasando como parámetro un objeto FileReader
BufferedReader arch = new BufferedReader(new FileReader(f));
4. Para leer un registro del archivo, usar el método
String readLine() throws IOException
El cual lee una línea de texto. Se considera, que una línea de texto finaliza con un line feed
('\n'), un carriage return ('\r') o un carriage return seguido inmediatamente por un linefeed
(ENTER). Por ejemplo:
String s = arch.readLine();
En la variable s estarán almacenados la secuencia de campos (tokens).
5. Crear un objeto StringTokenizer, pasando como parámetro la variable s leída en el
paso anterior. (Es recomendable revisar la clase StringTokenizer para conocer que
métodos contiene). Por ejemplo:
StringTokenizer st = new StringTokenizer(s);
6. Si el separador de campo, de los datos almacenados en el registro es un espacio en blanco o
un tabulador, o enter, extraer los datos contenidos en el registro usando el método
nextToken() de la clase StringTokenizer. Por ejemplo, si el registro tiene dos campos
de datos:
String dato1 = st.nextToken();
String dato2 = st.nextToken();
7. Si los valores dato1 y dato2, se requieren almacenar en variables de un tipo diferente a
String, se debe realizar la conversión de tipo utilizando algún método apropiado para ello.
Similar al paso 3 de la lectura desde teclado.
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005.
3
Ejemplo
El siguiente método leer de la clase Elipse, lee desde un archivo de datos asociado al
objeto en, un registro que contiene dos valores int(x, y) y a continuación dos valores
double (a, b), correspondientes al centro (x,y) y semiejes (a,b) de un objeto Elipse
public void leer(BufferedReader en)throws EOFException, IOException{
String s;
StringTokenizer t;
s = en.readLine();
if (s == null) throw new EOFException("EOF encontrado");
t = new StringTokenizer(s);
x = Integer.parseInt(t.nextToken().trim());
y = Integer.parseInt(t.nextToken().trim());
a = java.lang.Double.parseDouble(t.nextToken().trim());
b = java.lang.Double.parseDouble(t.nextToken().trim());
}
El siguiente código abre un archivo Elipses.txt, y luego lee los datos almacenados en el
archivo. La primera línea del archivo, contiene un valor n que representa el número de
registros del archivo, y en las siguientes n líneas, se encuentran los cuatro valores
correspondientes a los datos de una Elipse.
File f1 = new File("u:\\compAvanz12005\\unidad2\\ Elipses.txt");
FileReader fS1 = new FileReader(f1);
BufferedReader entrada = new BufferedReader(fS1);
Elipse e = new Elipse(p,0,0);
n = Integer.parseInt(entrada.readLine().trim());
for (int i = 0; (i < n) ; i++){
e.leer(entrada);
// lee un registro del archivo
System.out.println(e);
// lo escribe en la consola
}
entrada.close(); // cierra el archivo
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005.
4
Salida de datos
Hacia un archivo secuencial
1. Importar el paquete java.io
2. Crear un objeto File.
File f = new File("u:\\compAvanz12005\\unidad2\\datos.dat");
3. Crear un objeto BufferedWriter, pasando como parámetro al constructor un objeto
FileWriter. Ejemplo:
BufferedWriter bw= new BufferedWriter(new FileWriter(f));
4. Crear un objeto PrintWriter, pasando como parámetro el objeto BufferedWriter
PrintWriter salida = new PrintWriter(bw);
5. Usar el método println() para escribir un registro de datos y colocar la marca de fin de
registro (enter).
Por ejemplo:
salida.println((double)i/10 + "\t"+ 2*i+" "+i);
Ejemplo
El siguiente código, abre un archivo secuencial para escribir datos en él y luego escribe 10
registros
// escribe datos en un archivo de acceso secuencial
File f = new File("u:\\compAvanz12005\\unidad2\\datos.dat");
FileWriter fE = new FileWriter(f);
BufferedWriter bw= new BufferedWriter(fE);
PrintWriter salida = new PrintWriter(bw);
for (int i = 0; i<10; i++){
salida.println((double)i/10 + "\t"+ 2*i+" "+i);
}
salida.close(); // cierra el archivo
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005.
5
Ir al inicio de un archivo
Para poder retornar al inicio de un archivo, una vez que este ha sido recorrido, previamente
debe haberse colocado una marca al inicio del archivo, cuando fue abierto, con el método
void
mark(int readAheadLimit)throws
IOException
(el parámetro es el numero de
caracteres de pueden ser leídos, preservando la marca, después que se leen esa cantidad de
caracteres puede fallar un intento de reset)
para luego poder retornar a la posición marcada con el método
void reset() throws IOException.
Por ejemplo:
public static void main(String[] args) throws Exception{
File f = new File("u:\\compAvanz22004\\unidad2\\geometria.dat");
BufferedReader arch = new BufferedReader(new FileReader(f));
arch.mark(1024); // marca el inicio del archivo
final int N = 10;
Punto p[] = new Punto[N];
for(int i = 0; i < N; i++){
// lee N registros
p[i]= new Punto();
p[i].leer(arch);
}
arch.reset(); // retorna
a la posición marcada con el metodo mark
Circulo p1[] = new Circulo[N];
for(int i = 0; i < N; i++){
// lee de Nuevo los N registros
p1[i]= new Circulo(0,0,0);
p1[i].leer(arch);
}
arch.close();
}
Universidad de Carabobo. Facultad de Ingeniería. Departamento de Computación. Computación Avanzada. 1-2005.