Ficheiros de acceso secuencial

De MediaWiki
Revisión del 15:13 28 feb 2022 de Joselv (discusión | contribuciones) (Página creada con «= Traballar con ficheiros de acceso secuencial = O acceso secuencial é o máis frecuente cando se traballa con ficheiros, e xa coñecemos as características e vantaxes do…»)
(dif) ← Revisión anterior | Revisión actual (dif) | Revisión siguiente → (dif)
Ir a la navegación Ir a la búsqueda

Traballar con ficheiros de acceso secuencial

O acceso secuencial é o máis frecuente cando se traballa con ficheiros, e xa coñecemos as características e vantaxes do acceso explicadas no primeiro apartado.

Neste tipo de acceso hai te que ter en conta que debemos coñocer o formato ou estrutura do ficheiro de antemán, e ir procesándoo.

No labor de lectura ou escritura podese traballar a nivel de bytes ou de caracteres. O seguinte exemplo amosa unha posible aplicación liña a liña de ficheiros de texto.

O exemplo é un pequeno programa de produtos e proveedores dunha empresa.

Operacións con acceso secuencial:

Abrir/crear ficheiro: detallado no apartado de ficheiros de texto.

String fichero = "produc.txt"; File f = new File(fichero); FileWriter fw = new FileWriter(f);

Gardar en ficheiro: unha vez aberto unha posibilidade para gardar é usar a clase PrintWriter. O que temos que ter en conta é que o gardar creamos unha estructura ríxida de información/rexistros, que logo vamos a utilizar para ler ou engadir máis rexistros.

Exemplo de gardar os produtos:

PrintWriter escritura = new PrintWriter(fw); for (int i = 0; i < menu.produtos.size(); i++) {

     escritura.println(menu.produtos.get(i).imprimeProduto());

} escritura.close(); A información que temos que gardar está nunha colección de obxectos, e a orden de almacenamento dos datos está no método imprimeProducto():

public String imprimeProduto() {

    String salidaProducto = codProd + ":" + tipo + ":" + nome + ":" + prezo + ":" + pais + ":";
       for (int i = 0; i < this.getCodigoProveedor().size(); i++) {
           if (i != 0) {
               saidaProduto = saidaProduto.concat(",");
           }
      saidaProduto=    saidaProduto.concat(this.getCodigoProveedor().get(i).getCodProv());
       }
       return saidaProduto;
   }

Ler en ficheiros: este exemplo lee de maneira secuencial e volca toda esta información en obxectos e istos a súa vez introdúcense nunha colección para xestionalos axeitadamente (neste caso ArrayList):

FileReader fr = null;
           BufferedReader br = null;
           fr = new FileReader("prov.txt");
           
           br = new BufferedReader(fr);
           String linea;
           String[] items;
           while ((linea = br.readLine()) != null) {
               items = linea.trim().split(":");
               menu.proveedores.add(new Proveedor(items[0], items[1], items[2].toUpperCase()));
           }
           br.close();

Neste exemplo debemos coñecer como é a estrutura do ficheiro liña a liña; no exemplo cada liña é un proveedor e ten tres datos separados por “:”.

Exemplo completo e enunciado:

Disponse de dous ficheiros de texto “proveedores.txt” e “productos.txt”:

proveedores.txt: cada liña conten a información dun proveedor. Esta componse dos seguintes campos separados por “:”

                                   codProv:nome:enderezo

productos.txt: cada liña conten a información dun produto. Esta componse dos seguintes campos separados por “:”

                                   codProd:tipo:nome:prezo[:pais]:codProv,codProv,codProv

Coma se pode observar, o quinto e o sexto campo da liña está formado a súa vez por unha lista que contén o código dos proveedores que suministran o devandito produto, e estes códigos están separados polo carácter “,”. Existen dous tipos de produtos: con “n” é nacional, e con “i” internacional. Se é internacional o producto terá un campo máis que é o país de orixe.

A partires destos ficheiros crear os obxectos precisos, cunha arquitectura O.O. correcta.

Crea un programa con estas funcionalidades:

  • Engadir un producto.
  • Obter un total do facturado por parte dun proveedor.
  • Engadir proveedor a un determinado producto.
  • Gardar os cambios nos correspondentes ficheiros.

Copia de seguridade: pidénnos que gardemos en ficheiros binarios a información de proveedores como de productos. Estos ficheiros con extensión .dat.

Solución: unidad1.actividade.secuencial