Diferencia entre revisiones de «Introdución os ficheiros»

De MediaWiki
Ir a la navegación Ir a la búsqueda
 
(No se muestra una edición intermedia del mismo usuario)
Línea 2: Línea 2:
 
Na programación adoitan usarse variables para almacenar información que queremos tratar durante a execución: os datos de entrada, resultados e valores intermedios.
 
Na programación adoitan usarse variables para almacenar información que queremos tratar durante a execución: os datos de entrada, resultados e valores intermedios.
  
−
Con todo, '''a información almacenada nas variables é volatil''', desaparendo cando remata a execución do programa. Cando queremos '''almacenar de xeito permanente''', fálase de '''persistencia''', sendo dúas as formás máis habituales de facelo:  
+
Con todo, '''a información almacenada nas variables é volatil''', desaparecendo cando remata a execución do programa. Cando queremos '''almacenar de xeito permanente''', fálase de '''persistencia''', sendo dúas as formás máis habituales de facelo:  
 
* organizado a información nun ou varios '''ficheiros nun sistema de almacenamento persistente'''
 
* organizado a información nun ou varios '''ficheiros nun sistema de almacenamento persistente'''
 
* facendo uso das facilidades que nos permiten as '''bases de datos'''
 
* facendo uso das facilidades que nos permiten as '''bases de datos'''
  
 
Neste capítulo introduciremos a primeira das opcións; e para iso, comezaremos abordando a súa definición desde o punto de vista de máis baixo nivel:
 
Neste capítulo introduciremos a primeira das opcións; e para iso, comezaremos abordando a súa definición desde o punto de vista de máis baixo nivel:
−
  Un '''ficheiro''' é un '''conxunto de bits almacenado nun dispositivo accesible''' a través dunha ruta ('''pathname'') que o identifica.
+
  Un '''ficheiro''' é un '''conxunto de bits almacenado nun dispositivo accesible''' a través dunha ruta (''pathname'') que o identifica.
  
 
Básicamente, unha secuecia de 1s e 0s que son almacenados fóra da memoria volátil do equipo (nun disco duro ou nun DVD, por exemplo).
 
Básicamente, unha secuecia de 1s e 0s que son almacenados fóra da memoria volátil do equipo (nun disco duro ou nun DVD, por exemplo).

Revisión actual del 14:10 3 mar 2022

Os ficheiros

Na programación adoitan usarse variables para almacenar información que queremos tratar durante a execución: os datos de entrada, resultados e valores intermedios.

Con todo, a información almacenada nas variables é volatil, desaparecendo cando remata a execución do programa. Cando queremos almacenar de xeito permanente, fálase de persistencia, sendo dúas as formás máis habituales de facelo:

  • organizado a información nun ou varios ficheiros nun sistema de almacenamento persistente
  • facendo uso das facilidades que nos permiten as bases de datos

Neste capítulo introduciremos a primeira das opcións; e para iso, comezaremos abordando a súa definición desde o punto de vista de máis baixo nivel:

Un ficheiro é un conxunto de bits almacenado nun dispositivo accesible a través dunha ruta (pathname) que o identifica.

Básicamente, unha secuecia de 1s e 0s que son almacenados fóra da memoria volátil do equipo (nun disco duro ou nun DVD, por exemplo).

Desde un nivel máis alto, e para o que nos interesa desde o punto de vista da programación, esta é a información que debemos ter en conta. http://ocw.udl.cat/enginyeria-i-arquitectura/programacio-2/continguts-1/4-manejo-bai81sico-de-archivos-en-java.pdf

Tipos de fichero segundo a súa estrutura de almacenamento

Podemos clasificalos atendendo a súa estrutura de almacenamento

Por contido

Podemos atopar os seguintes tipos básicos de ficheiros:

Texto plano Almacenan secuencias de caracteres correspondentes a unha codificación determinada (ASCII, Unicode, EBCDIC, etc.). Son lexibles mediante un software de edición de texto coma o Bloc de Notas de Windows o os editores Vi ou nano de Linux.

Exemplos:

  • os ficheiros de texto con extensión .txt
  • os .csv de valores separados por comas
  • os .htm y .html correspondentes a páginas web
  • os de linguaxes de marcas .xml o .rss.
O sistema de codificación de caracteres máis popular é o código ASCII (American Standard Code for Information Interchange, código estándar estadounidense para intercambio de información), que define 256 caracteres distintos (todas as combinacións de 8 bits,dous elevado a 8 posibilidades). Algúns deles, chamados caracteres de control, encarganse de definir accións coma o borrado, o salto de liña ou o tabulador e non representan símbolos concretos.
Pequeno xogo
Busca en internet unha táboa de códigos ascii de 8 bits. Observa as seguintes características:
Os 32 primeros caracteres, chamados caracteres non imprimibles, utilizábanse tradicionalmente para o control de transmisións.
A distancia entre maiúsculas e minúsculas é exactamente 32 caracteres.
Hai caracteres que son numéricos, e que o seu valor ascii é o resultado de sumarlle 48. Por exemplo, 6+48=54. 54 é o código ascii do caracter 6.

Binarios Conteñen información codificada en binario para o seu procesamento por parte de aplicacións. O seu contido resulta ilexible nun editor de texto.

Exemplos: executables (.exe) documentos de aplicacións (.pdf, .docx, .xlsx, .pptx) fiicheiros de imaxe, audio ou vídeo (.jpg, .gif, .mp3, .avi, .mkv) librerías de sistema (.dll).

Por organización interna

Cando se utilizan ficheiros de texto plano para almacenar información podense clasificar dacordo a súa organización interna:

Secuenciais

A información escríbese en posicións físicamente contiguas. Para acceder a un dato hay que recorrer todos os anteriores.

Exemplo de ficheiro secuencial con información sobre clientes:

00789521T#Alba#Blanco#González#613524647$11111111H#Xosé Ramon#García#Pemán#613423824$38546998X#Xurxo#Cazás#Otero#666332245$09653801B#Antón#Resines#Pardo#619335241%

Por cada contacto estructurouse a información en cinco datos independeentes: NIF, nome, primer apelido, segundo apelido e número de teléfono. Neste caso o programador decidiu utilizar o grade (#) como separador de datos, o dólar ($) como separador de contactos e o tanto por cento (%) coma marca de fin de ficheiro.

De acceso directo ou aleatorio Cada liña de contido organízase cuns tamaños fixos de dato. Pódese acceder directamente ó principio de cada liña.

Nesta ocasión cada contacto ocupa unha liña do ficheiro (o final de cada unha o sistema operativo incluirá un ou dos caracteres de salto de liña invisibles para o usuario), e cada dato utiliza un número de caracteres fixo, aínda que non o ocupe totalmente (no exemplo reservanse 15 caracteres para o nome, ainda que no caso de Alba só se utilicen catro).

Coma todos os clientes ocupan o mesmo espacio no fichero, podemos acceder fácilmente a calquiera deles multiplicando a posición na que se atopa menos una polo número de caracteres que mide cada liña. Por exemplo, se o fichero foi creado nun sistema Windows e queremos acceder o terceiro cliente, teremos que restar un á súa posición (3 − 1 = 2) e multiplicar o valor resultante pola lonxitude da liña (63 caracteres máis os dous caracteres de salto de liña que inclúe o sistema operativo, é decir, 65). Como 2 × 65 = 130, a información do terceiro cliente atoparase na posición 131.

A contrapartida a esta facilidad de posicionamiento é que o tamaño do ficheiro crece considerablemente respecto á súa versión secuencial.

Indexados

Xeralmente nun ficheiro de acceso aleatorio a información almacénase na orde en que se da de alta. Aínda que se conseguira introducir a información de acordo a algún criterio de ordenación concreto, nalgunhas ocasións é útil poder ordeala por varios criterios distintos. No exemplo anterior é posible que necesitemos un listado de clientes ordenado por NIF e outro polo apelido. Para dar solución a este problema creouse a organización indexada, que consiste na existencia de un ou varios archivos adxuntos que ordenan o dato (chamado clave) polo que se desexa ordear o ficheiro e o relacionan coa localización da liña correspondente.

Por tipos de soporte de almacenamento

De acordo á organización física dos datos, diferenciamos entre dous tipos de soportes

Secuenciais

Para acceder a un dato hai que recorrer todo o contido do soporte previo ó devandito dato (por exemplo, as cintas magnéticas).

Direccionables

Pódese acceder directamente a un dato sen ter que recorrer todos os anteriores (por exemplo un disco duro).

Nun soporte direccionable pódese implementar un acceso secuencial, directo ou indexado, mentras que nun soporte secuencial só se poderá implementar un acceso secuencial. Por xerarquía de memorias


https://es.wikipedia.org/wiki/Jerarqu%C3%ADa_de_memoria#/media/Archivo:Jerarquia_memoria.png

- Intro de ficheros teórica (algo light es de segundo), tipos (temporales),jerarquía de los datos,codificaciones, flujos y accesos.Y tratamiento de excepciones:

Cuestións relevantes a ter en conta Codificación

Tratamento dos saltos de liña Un fin de liña pode estar indicado por: o caracter line-feed (‘\n’), utlizado en contornas tipo Unix o caracter carriage-return (‘\r’), utilizado en versións antguas de MacOs o caracter carriage-return seguido de line-feed, en contornas Windows É preciso ter en conta isto para manipular ficheiros de xeito uniforme entre sistemas operativos.

E/S con fluxos

En Java defínese a abstracción de stream (fluxo) para tratar a comunicación de información entre o programa e o exterior. Entre unha fonte e un destino fluye unha secuencia de datos: os fluxos, que actúan coma interfaz co dispositivo ou clase asociada. Así permiten:

  • Operación independente do tipo de datos e do dispositivo
  • Maior flexibilidade (redirección, combinación, ….)
  • Diversidade de dispositivos (ficheiro, pantallas, teclado, rede, …)
  • Diversidade de formas de comunicación (con modo de acceso secuencial ou aleatorio, e información intercambiada que pode ser binaria, caracteres ou liñas)

Hai unha certa analoxía entre o funcionamento en Unix e en Java.

Analoxía entre Unix e Java
Unix Java
Entrada estándar Habitualmete teclado System.in
Saída estándar Habitualmente a consola System.out
Saída de erro Habitualmente a consola System.err

En Java accedese á E/S estándar a través dos campos estáticos da clase java.lang.System indicados.

Utilización dos fluxos

Lectura

1. Abrir un fluxo a una fuente de datos (creación do obxecto stream)

  • Teclado
  • Fichero
  • Socket remoto

2. Mentres existan datos disponibles

  • Ler datos

3. Pechar o fluxo (método close)

Escritura

1. Abrir un fluxo a una fuente de datos (creación del objeto stream)

  • Pantalla
  • Ficheiro
  • Socket local

2. Mentres existan datos disponibles • Escribir datos

3. Pechar o fluxo (método close)

A ter en conta:

  • o sistema xa se encarga de abrir e pechar os fluxos estándar
  • un fallo en calquera punto produce a excepción IOException

Para o que estamos a tratar, serán de intese os File streams para escribir e ler datos en ficheiros

Exemplo de entrada de texto desde un ficheiro

 1  try {
 2   BufferedReader reader =
 3   new BufferedReader(new
 4   FileReader(“nomeficheiro"));
 5   String linea = reader.readLine();
 6   while(linea != null) {
 7    // procesar o texto da liña
 8    linea = reader.readLine();
 9   }
10  reader.close();
11   }
12   catch(FileNotFoundException e) {
13   // non se atopou o ficheiro
14   }
15   catch(IOException e) {
16   // algo foi mal ó ler ou pechar o ficheiro
17   }

De xeito xeral, pódese comprender o funcionamento do código… pero para mellorar o seu entendemento, explicaremos qué son as excepcións e como facer uso das mesmas.

Créditos e referencias