Fecha y hora actual: Jueves 17 Ene 2019 04:12
Índice del Foro

Foros de programación informática, diseño gráfico y Web

En esta comunidad intentaremos dar soporte de programación a todos los niveles, desde principiantes a profesionales de la informática, desarrollo de programas, programación web y mucho más.

Curso VB .NET - Tema 1.40.2 - Archivos secuenciales, Java.

Responder al Tema

Índice del Foro > Visual Basic .NET > Curso VB .NET - Tema 1.40.2 - Archivos secuenciales, Java.

Autor Mensaje
Tesis
Administrador


Registrado: 04 Mar 2007
Mensajes: 3200
Ubicación: Valencia - España

Mensaje Publicado: Lunes 25 Ene 2010 12:27

Título del mensaje: Curso VB .NET - Tema 1.40.2 - Archivos secuenciales, Java.

Responder citando

Curso de programación en .NET - Tema 1.40.2 - Archivos secuenciales, Java.


1. Archivos secuenciales, Java.
1.1 Objetivos del tema.

Visto el acceso a un archivo, vamos a ver el acceso a un archivo secuencial utilizando un formato en ASCII delimitado como formato de grabación, que es el más estándar de todos.

1.2 Introducción.
Son archivos que se generan con una estructura que puede o no ser fija y que su lectura no puede ser direccionada.
Otro aspecto, es que por la estructura de datos generada en el archivo, la misma permita que se direccionen los registros, y que dicho archivo pueda ser abierto bajo otro formato distinto, de acceso aleatorio, pero eso es una particularidad, o una excepción, y también podríamos enfocarlo al revés, es decir es un archivo random, que se usa como archivo secuencial, para gustos los colores.

Otro aspecto sobre los archivos secuenciales, es que la estructura de datos que albergan no tiene porque ser una estructura fija, pueden ser registros con una estructura distinta de unos a otros, y además la longitud puede ser variable, siempre y cuando se este utilizando el formato de ASCII delimitado, que incorpora la delimitación de campos y de final de registro.

1.3 Previo.
Para la utilización de los ejemplos siguientes es necesario la importación de las siguientes clases.
Código:
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;

Con estas clases se puede gestionar los archivos, tanto en su enlace con el Sistema Operativo, con en la entrada, salida de datos, y la captura de errores.
Sin la importación de estas clases los ejemplos generaran error.

1.4 Abrir un archivo.
El primer paso para acceder a un archivo es siempre enlazarlo con el programa, abrirlo.
En Java la operación de apertura de un archivo ser realiza asignando dicho archivo a una variable de tipo archivo.
Código:
File Archivo;
Archivo = new File(Ruta + Nombre);

En este paso lo que se consigue es asociar un nombre de archivo a esa variable.
Pero con eso lo que se consigue es enlazar el archivo, aún no está definido si se usará para leer o para grabar.

El siguiente paso es realizar la apertura, en el modo que nos interese.
Para grabación se define una variable del tipo FileWriter.
Código:
FileWriter Salida;
Salida = null;
Salida = new FileWriter(Archivo);

Ahora lo que se consigue es asociar el archivo que hemos definido anteriormente, a un objeto que ya indicará si es de lectura o de escritura, o entrada o salida, como se prefiera.

Para lectura se define una variable del tipo FileReader.
Código:
FileReader Entrada;
Entrada = new FileReader(Archivo);

Estos objetos definidos harán referencia al archivo declarado anteriormente.

1.5 Grabar una estructura de datos.
Bueno visto como efectuar la lectura y escritura en un archivo secuencial, conviene ampliar el tema para un archivo con una estructura algo más amplia.

Para la estructura de datos podemos utilizar un array o una colección, con el fin de almacenar los datos a utilizar en la misma.
La grabación de los datos no es nada más que la generación de un registro de datos con un formato en concreto, uno de los más extendidos es el ASCII delimitado.
En este formato se graban los datos numéricos separados por comas y los alfanuméricos encerrados entre comillas dobles.

La estructura se graba como una variable definida con una estructura de usuario.
Código:
public class TipoRegistro
{
   public char[] Exped = new char[2];
   public char[] Nomb = new char[12];
   public char[] Ape1 = new char[12];
   public char[] Ape2 = new char[12];
   public char[] Domic = new char[20];
   public TipoRegistro()
   {
   }
}

Y grabar
Código:
static void Grabar(FileWriter Salida, TipoRegistro Registro)
throws IOException
{
   Salida.write("01");
   Salida.write("Nombre 1 ");
   Salida.write("Apellido 1 1");
   Salida.write("Apellido 2 1");
   Salida.write("Domicilio uno ");
}


Si tuviéramos que realizar la captura de datos por teclado podríamos realizar lo siguiente.
Código:
BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));
String Dato;
Dato = new String();

System.out.println("Nombre ");
Dato = Campo.readLine();
while (Dato.length() != 20) Dato = Dato.concat(" ");
Registro.Nombre = Dato.toCharArray();


Y la explicación es
Código:
BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));


Nos permitirá la captura de datos desde el buffer de teclado.
Código:
while (Dato.length() != 20) Dato = Dato.concat(" ");


Como hay que grabar datos de longitud fija, de esta forma completamos la longitud del dato hasta lo longitud definida.
Código:
Registro.Nombre = Dato.toCharArray();


Si se define el registro como un
Código:
public char[] Nombre = new char[20];


Con está línea se convierte el string en array of char, que es como se ha definido, para después ejecutar,
Código:
Salida.write(Registro.Nombre);


1.6 Leer un registro.
El siguiente paso sería intentar leer el registro que hemos grabado anteriormente.
Código:
private static void Lectura() throws IOException
{
   File Archivo;
   Archivo = new File("Pruebas.dat");
   FileReader Entrada = new FileReader(Archivo);
   
  TipoRegistro Registro;
   Registro = new TipoRegistro();

   Entrada.read(Registro.Exped, 0, 2);
   Entrada.read(Registro.Nomb, 0, 12);
   Entrada.read(Registro.Ape1, 0, 12);
   Entrada.read(Registro.Ape2, 0, 12);
   Entrada.read(Registro.Domic, 0, 20);

   Ver (Registro);
   Entrada.close();
}


1.7 Lectura de un archivo secuencial.
La lectura de un archivo secuencial se basa siempre en el uso de un bucle del tipo mientras. La estructura de dicho bucle es la que sigue:
Código:
private static void Bucle() throws IOException
{
   System.out.println("Inicio");
   File Archivo;
   Archivo = new File("Pruebas.dat");
   FileReader Entrada = new FileReader(Archivo);
 
   TipoRegistro Registro;
   Registro = new TipoRegistro();
   while (Entrada.read(Registro.Exped, 0, 2) != -1)
   {
      Entrada.read(Registro.Nomb, 0, 12);
      Entrada.read(Registro.Ape1, 0, 12);
      Entrada.read(Registro.Ape2, 0, 12);
      Entrada.read(Registro.Domic, 0, 20);
      Ver (Registro);
   }
   Entrada.close();
}


1.8 Cierre
Para ello se utiliza la instrucción Entrada.Close();

1.9 Ejercicios propuestos.

  1. Diseñe un registro de datos con los datos de los teléfonos de sus amigos.
  2. Realice la entrada de datos por teclado y grabe los datos con un archivo secuencial.
  3. Realizar el listado de esos datos en pantalla.
  4. Cree ahora un archivo igual al anterior y añádale el dato tipo y grabe datos en él. El campo tipo será 1 para nuevos datos, 2 para actualizar datos existentes, 3 para borrar datos.

1.10 Solución a los ejercicios propuestos.
1.-Diseñe un registro de datos con los datos de los teléfonos de sus amigos.
Código:
public class Amigos
{
   public char[] Codigo = new char[2];
   public char[] Nombre = new char[20];
   public char[] Domicilio = new char[20];
   public char[] Telef_Fijo = new char[9];
   public char[] Telef_Movil = new char[9];
   public char[] Correo_Elect = new char[30];
   public Amigos)
   {
   }
}

2.-Realice la entrada de datos por teclado y grabe los datos con un archivo secuencial.
Código:
package tema_40;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main
{
   static void PedirDatos (TipoEjercicio Registro) throws IOException
   {
      BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));
      String Dato;
      Dato = new String();
      System.out.println("Código" + Dato);
      Dato = Campo.readLine();

      if (Dato.length() == 1) Dato = "0" + Dato;
      System.out.println("Código [" + Dato +"]" );
      Registro.Codigo =Dato.toCharArray();
      System.out.println("Nombre ");
      Dato = Campo.readLine();

      while (Dato.length() != 20) Dato = Dato.concat(" ");
      Registro.Nombre = Dato.toCharArray();
      System.out.println("Domicilio ");
      Dato = Campo.readLine();

      while (Dato.length() != 20) Dato = Dato + " ";
      Registro.Domicilio =Dato.toCharArray();
      System.out.println("Teléfono ");
      Dato = Campo.readLine();

      while (Dato.length() != 9) Dato = Dato + " ";
      Registro.Telef_Fijo = Dato.toCharArray();
      System.out.println("Telef. movil ");
      Dato = Campo.readLine();

      while (Dato.length() != 9) Dato = Dato + " ";
      Registro.Telef_Movil = Dato.toCharArray();
      System.out.println("Correo electrónico");
      Dato = Campo.readLine();

      while (Dato.length() != 30) Dato = Dato + " ";
      Registro.Correo_Elect = Dato.toCharArray();
      System.out.println("Los datos introducidos son ");
      System.out.print("Código ");
      System.out.println(Registro.Codigo);
      System.out.print("Nombre ");
      System.out.println(Registro.Nombre);
      System.out.print("Domicilio ");
      System.out.println(Registro.Domicilio);
      System.out.print("Teléfono ");
      System.out.println(Registro.Telef_Fijo);
      System.out.print("Telef. movil ");
      System.out.println(Registro.Telef_Movil);
      System.out.print("Correo electrónico ");
      System.out.println(Registro.Correo_Elect);
   }
   static boolean Pregunta(String Mensaje) throws IOException
   {
      BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));
      String Dato;
      Dato = new String();
      Boolean Respuesta;
      System.out.println(Mensaje);
      Dato = Campo.readLine();
      Dato = Dato.toUpperCase();
      Respuesta = Dato.contains("S");
      
    return Respuesta;
   }
   static void Grabar(FileWriter Salida, TipoEjercicio Registro) throws IOException
   {
      Salida.write(Registro.Codigo);
      Salida.write(Registro.Nombre);
      Salida.write(Registro.Domicilio);
      Salida.write(Registro.Telef_Fijo);
      Salida.write(Registro.Telef_Movil);
      Salida.write(Registro.Correo_Elect);
      System.out.println("Datos grabados");
   }
   public static void main(String[] args) throws IOException
   {
      File Archivo;
      FileWriter Salida;
      Archivo = new File("Amigos.txt");
      Salida = new FileWriter(Archivo);
      TipoEjercicio Registro;
      Registro = new TipoEjercicio();
      do
      {
         PedirDatos(Registro);
         if (Pregunta("Datos correctos S/N")) Grabar(Salida,Registro);
      }
      while (Pregunta("Desea grabar más datos S/N"));
      Salida.close();
   }
}


3.-Realizar el listado de esos datos en pantalla.
Código:
package tema_40;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main
{
   private static void Ver (TipoEjercicio Registro)
   {
      System.out.print(Registro.Codigo );
      System.out.print(Registro.Nombre );
      System.out.print(Registro.Domicilio );
      System.out.print(Registro.Telef_Fijo );
      System.out.print(Registro.Telef_Movil );
      System.out.print(Registro.Correo_Elect);
      System.out.println();
   }
   private static void Lectura (FileReader Entrada, TipoEjercicio Registro) throws IOException
   {
      Entrada.read(Registro.Nombre, 0, 20);
      Entrada.read(Registro.Domicilio, 0, 20);
      Entrada.read(Registro.Telef_Fijo, 0, 9);
      Entrada.read(Registro.Telef_Movil, 0, 9);
      Entrada.read(Registro.Correo_Elect, 0, 30);
   }
   private static void Bucle(FileReader Entrada,
   TipoEjercicio Registro) throws IOException
   {
      System.out.println("Inicio");
      System.out.println("Co Nombre Domicilio Tel Fijo Tel
      Movil Correo elec.");
      while (Entrada.read(Registro.Codigo, 0, 2) != -1)
      {
         Lectura(Entrada,Registro);
         Ver (Registro);
      }
      Entrada.close();
      System.out.println("Final");
   }
   public static void main(String[] args) throws IOException
   {
      File Archivo;
      FileReader Entrada;
      Archivo = new File("Amigos.txt");
      Entrada = new FileReader(Archivo);
      TipoEjercicio Registro;
      Registro = new TipoEjercicio();
      Bucle(Entrada, Registro);
      Entrada.close();
   }
}


4.-Cree ahora un archivo igual al anterior y añádale el dato tipo y grabe datos en él.
El campo tipo será 1 para nuevos datos, 2 para actualizar datos existentes, 3 para borrar datos.
Código:
package tema_40;
import java.io.File;
import java.io.FileWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main
{
   static void PedirDatosCambios (TipoCambio Registro) throws IOException
   {
      BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));
      String Dato;
      Dato = new String();
      System.out.println("Código" + Dato);
      Dato = Campo.readLine();
      
    if (Dato.length() == 1) Dato = "0" + Dato;
      System.out.println("Código [" + Dato +"]" );
      Registro.Codigo =Dato.toCharArray();
      System.out.println("Nombre ");
      Dato = Campo.readLine();
      
    while (Dato.length() != 20) Dato = Dato.concat(" ");
      Registro.Nombre = Dato.toCharArray();
      System.out.println("Domicilio ");
      Dato = Campo.readLine();
 
      while (Dato.length() != 20) Dato = Dato + " ";
      Registro.Domicilio =Dato.toCharArray();
      System.out.println("Teléfono ");
      Dato = Campo.readLine();

      while (Dato.length() != 9) Dato = Dato + " ";
      Registro.Telef_Fijo = Dato.toCharArray();
      System.out.println("Telef. movil ");
      Dato = Campo.readLine();

      while (Dato.length() != 9) Dato = Dato + " ";
      Registro.Telef_Movil = Dato.toCharArray();
      System.out.println("Correo electrónico");
      Dato = Campo.readLine();

      while (Dato.length() != 30) Dato = Dato + " ";
      Registro.Correo_Elect = Dato.toCharArray();
      System.out.println("Tipo de incidencia, 1 Nuevo, 2 Cambios, 3 Borrado");
      Dato = Campo.readLine();
      Registro.Tipo = Dato.toCharArray();

      System.out.println("Los datos introducidos son ");
      System.out.print("Código ");
      System.out.println(Registro.Codigo);
      System.out.print("Nombre ");
      System.out.println(Registro.Nombre);
      System.out.print("Domicilio ");
      System.out.println(Registro.Domicilio);
      System.out.print("Teléfono ");
      System.out.println(Registro.Telef_Fijo);
      System.out.print("Telef. movil ");
      System.out.println(Registro.Telef_Movil);
      System.out.print("Correo electrónico ");
      System.out.println(Registro.Correo_Elect);
      System.out.print("Tipo de incidencia ");
      System.out.println(Registro.Tipo);
   }
   static boolean Pregunta(String Mensaje) throws IOException
   {
      BufferedReader Campo = new BufferedReader(new InputStreamReader(System.in));
      String Dato;
      Dato = new String();
      Boolean Respuesta;
      System.out.println(Mensaje);
      Dato = Campo.readLine();
      Dato = Dato.toUpperCase();
      Respuesta = Dato.contains("S");
      
    return Respuesta;
   }
   static void GrabarCambios(FileWriter Salida, TipoCambio Registro) throws IOException
   {
      Salida.write(Registro.Codigo);
      Salida.write(Registro.Nombre);
      Salida.write(Registro.Domicilio);
      Salida.write(Registro.Telef_Fijo);
      Salida.write(Registro.Telef_Movil);
      Salida.write(Registro.Correo_Elect);
      Salida.write(Registro.Tipo);
      System.out.println("Datos grabados");
   }
   public static void main(String[] args) throws IOException
   {
      File Archivo;
      FileWriter Salida;
      Archivo = new File("Cambios.txt");
      Salida = new FileWriter(Archivo);
      TipoCambio Registro;
      Registro = new TipoCambio();
      do
      {
         PedirDatosCambios(Registro);
         if (Pregunta("Datos correctos S/N")) GrabarCambios(Salida,Registro);
      }
      while (Pregunta("Desea grabar más datos S/N"));
      Salida.close();
   }
}



Autor del curso: casiopea


Normas del foro
Aprende a postear correctamente usando las etiquetas
Volver arriba
Ver perfil del usuario Enviar mensaje privado
Responder al Tema
Mostrar mensajes anteriores:   
Ir a:  
Todas las horas están en GMT + 2 Horas

Temas relacionados

Tema Autor Foros Respuestas Publicado
El foro no contiene ningún mensaje nuevo

necesito ayuda con el algoritmo de dijkstra en ...

mery Python 0 Jueves 13 Dic 2018 18:07 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Ayuda con TestNG Parametrico en java netbeans

baltigo Java 0 Sábado 30 Jun 2018 01:37 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Publicar Aplicación web JAVA en tomcat

Irvin Java Web 1 Viernes 13 Oct 2017 17:54 Ver último mensaje
El foro no contiene ningún mensaje nuevo

Imagen referencial De creación de jtable en apl...

Jensel S.G Java 6 Miércoles 13 Sep 2017 20:06 Ver último mensaje
El tema está bloqueado: no pueden editarse ni agregar mensajes.

EMPLEO ANALISTA PROGRAMADOR/A BACK-END JAVA EE

GRUPOARESTORA Bolsa de trabajo 0 Viernes 23 Jun 2017 14:33 Ver último mensaje
Panel de Control
No puede crear mensajes, No puede responder temas, No puede editar sus mensajes, No puede borrar sus mensajes, No puede votar en encuestas,