Eblinn Mariana Obando Gutiérrez 20192005009 ARCHIVOS Los programas usan variables para almacenar información, sin embargo, cuando se cierran todo desaparece. Pero, para muchas aplicaciones, es importante poder almacenar datos de manera permanente. Cuando se desea guardar información más allá del tiempo de ejecución de un programa lo habitual es organizar esa información en uno o varios ficheros almacenados en algún soporte de almacenamiento persistente. Otras posibilidades como el uso de bases de datos utilizan archivos como soporte para el almacenamiento de la información. Técnicamente, un archivo es un conjunto de bits almacenados en un dispositivo, y accesible a través de un camino de acceso que lo identifica. La clase file: Es especialmente útil para recuperar información acerca de un archivo o directorio de un disco. Los objetos de la clase File no abren archivos ni proporcionan herramientas para procesarlos. No obstante, los objetos File se utilizan frecuentemente con objetos de otras clases de java.io para especificar los archivos o directorios que van a manipularse. Creación de objetos File La clase File proporciona cuatro constructores. El constructor: public File( String nombre ); especifica el nombre de un archivo o directorio que se asociará con el objeto File. El nombre puede contener información sobre la ruta, así como el nombre de un archivo o directorio. La ruta de un archivo o directorio especifica su ubicación en el disco. La ruta incluye algunos o todos los directorios que conducen a ese archivo o directorio. Una ruta absoluta contiene todos los directorios, empezando con el directorio raíz, que conducen a un archivo o directorio específi co. Cada archivo o directorio en un disco duro específico tiene el mismo directorio raíz en su ruta. Una ruta relativa normalmente empieza desde el directorio en el que la aplicación empezó a ejecutarse y es, por lo tanto, una ruta “relativa” al directorio actual. Archivos de texto: Los archivos de texto plano son aquellos que están compuestos únicamente por texto sin formato, solo caracteres. estos caracteres se pueden codificar de distintos modos dependiendo de la lengua usada. Se les conoce también como archivos de texto llano o texto simple por carecer de información destinada a generar formatos y tipos de letra. Archivo binario: Un archivo binario es un archivo informático que contiene información de cualquier tipo, codificada en forma binaria para el propósito de almacenamiento y procesamiento de ordenadores. Muchos formatos binarios contienen partes que pueden ser interpretados como texto. Un archivo binario que solo contiene información de tipo textual sin información sobre el formato del mismo, se dice que es un archivo de texto plano. Habitualmente se contraponen los términos archivo binario y archivo de texto de forma que los primeros no contienen solamente texto. Acceso a los archivos: Acceso secuencial: En primer lugar se va a ver la lectura y escritura de datos de tipo carácter. Un carácter puede ser leído de un archivo (abierto previamente con el modo adecuado para permitir leer de él) mediante la función getc: int getc(FILE *pf) La función getc tiene como único argumento el descriptor de fichero pf y devuelve el carácter leído del fichero en forma de entero sin signo. El hecho de que la función devuelva un entero carece de importancia desde el punto de vista práctico ya que, al realizar la asignación a una variable de tipo char, se realiza la conversión de tipo automáticamente. Dado que los archivos son de acceso secuencial, tras la apertura del fichero, el carácter devuelto por getc será el primer carácter del archivo. Si se vuelve a utilizar la función getc, el carácter devuelto será el siguiente y así sucesivamente. El descriptor de fichero apunta al primer carácter del archivo cuando éste se abre y apunta al siguiente cada vez que se lee o escribe algun carácter. Acceso aleatorio: La utilización de ficheros de acceso secuencial sólo permite leer datos desde el principio del fichero o escribir datos al principio o al final del mismo. Es necesario introducir nuevos mecanismos para tener la posibilidad de acceder a posiciones intermedias de un fichero. Todas las operaciones vistas para el manejo de ficheros de acceso secuencial son válidas para los archivos de acceso aleatorio. El único elemento nuevo que se incorpora en este tipo de acceso a ficheros es una función capaz de posicionar el puntero del fichero que devuelve la función fopen en distintas partes del fichero para acceder a datos intermedios. Cuando se abre un fichero para lectura, el campo mencionado de la variable pt declarada de tipo FILE es 0, indicando de esta manera que la primera lectura que se haga será del primer byte. La función fseek( ) permite modificar el valor del puntero pf para que apunte a cualquier byte del fichero y tener de esta manera un acceso aleatorio. El manejo de archivos de acceso aleatorio no implica más que añadir la nueva función fseek a las ya existentes para archivos de acceso secuencial. Su especificación es la siguiente: fseek(FILE *pf, long int desplazamiento, int modo) donde: pf: es el puntero o descriptor de fichero, desplazamiento: es el desplazamiento en bytes a efectuar, modo: es el punto de referencia que se toma para efectuar dicho desplazamiento. En el fichero de cabecera <stdio .h> hay tres constantes definidas: o SEEK_SET (0) o SEEK_CUR (1) o SEEK_END (2) Los valores entre paréntesis indican su valor. El tercer parámetro (modo) de la función fseek puede contener una cualquiera de las constantes simbólicas indicando que el desplazamiento se hará a partir del principio del fichero (SEEK_SET), a partir del la posición actual de pf (SEEK_CUR) o a partir del final del fichero (SEEK_END). Caracteres: Es la información almacenada dentro de un archivo de texto, de modo que son los datos que se procesan al implementar un archivo. Lectura de archivos: Para leer datos de un archivo, hay que abrirlo de la siguiente manera: archivo = open(nombre) nombre es un string que tiene el nombre del archivo. archivo es el archivo lógico a través del que se manipulará el archivo. Si el archivo no existe, ocurrirá un error de entrada y salida (IOError). Es importante recordar que la variable archivo es una representación abstracta del archivo, y no los contenidos del mismo. La manera más simple de leer el contenido es hacerlo línea por línea. Para esto, basta con poner el archivo lógico en un ciclo for: for linea in archivo: # hacer algo Una vez que los datos han sido leídos del archivo, hay que cerrarlo: archivo.close() De modo que, el programa resulta de la siguiente manera: archivo = open('nombre de archivo.txt') for linea in archivo: print linea[0] archivo.close() Nomenclatura de datos: Todos los formatos de archivo o extensiones están escritos en mayúscula en la columna de la izquierda. A su derecha y en la misma línea todos ellos poseen una explicación adjunta o bien los programas recomendados para su uso. Todas las extensiones más importantes y que requieren una explicación más completa están marcados con un asterisco (*) y ampliadas en la parte final de su categoría correspondiente. Flujos de datos Las entradas y las salidas de datos en java se manejan mediante streams (flujos de datos). Un stream es una conexión entre el programa y la fuente (lectura) o el destino (escritura) de los datos. La información se traslada en serie a través de esta conexión. En Java existen 4 jerarquías de clases relacionadas con los flujos de entrada y salida de datos. OutputStream (para escritura), las cuales manejan los flujos de datos como stream de bytes. escritura), las cuales manejan stream de caracteres. Todas las clases de Java relacionadas con la entrada y salida se agrupan en el paquete java.io. Clase File La clase File permite manejar archivos o carpetas, es decir, crear y borrar tanto archivos como carpetas, entre otras funciones. Cuando se crea una instancia de la clase File no se crea ningún archivo o directorio, solo se crea una referencia hacia un objeto de este tipo. La creación de archivos o carpetas se realizan de manera explícita, invocando a los métodos respectivos. A continuación se enlistan los métodos más útiles que posee la clase File: ) FileOutputStream La clase FileOutputStream permite crear y escribir un flujo de bytes en un archivo de texto plano. Esta clase hereda de la clase OutputStream. Sus constructores más comunes son: FileOutputStream (String nombre) FileOutputStream (String nombre, boolean añadir) FileInputStream FileInputStream permite leer flujos de bytes desde un archivo de texto plano. Hereda de la clase InputStream. Sus constructores más comunes son: FileInputStream(String nombre) FileInputStream(File archivo) FileWriter: La clase FileWriter hereda de Writer y permite escribir un flujo de caracteres en un archivo de texto plano. BufferedWriter: La clase BufferedWriter también deriva de la clase Writer y permite crear un buffer para realizar una escritura eficiente de caracteres desde la aplicación hacía el archivo destino. PrintWriter: La clase PrintWriter, que también deriva de Writer, permite escribir de forma sencilla en un archivo de texto plano. Posee los métodos print y println, idénticos a los de System.out, y el método close( ), el cual cierra el stream de datos. FileReader: Las clases Reader se utilizan para obtener los caracteres ingresados desde una fuente. La clase FileReader hereda de Reader y permite leer flujos de caracteres de un archivo de texto plano. InputStreamReader: InputStreamReader es una clase que deriva de Reader que convierte los streams de bytes a streams de caracteres. System.in es el objeto de la clase InputStream el cual recibe datos desde la entrada estándar del sistema (el teclado). BufferedReader: La clase BufferedReader, que también deriva de la clase Reader, crea un buffer para realizar una lectura eficiente de caracteres. Dispone del método readLine que permite leer una línea de texto y tiene como valor de retorno un String. StringTokenizer: La clase StringTokenizer permite separar una cadena de texto por palabras (espacios) o por algún otro carácter. La clase StringTokenizer pertenece al paquete java.util. Scanner: La clase Scanner permite leer flujos de bytes desde la entrada estándar. Pertenece al paquete java.util. Los métodos principales de esta clase son next( ) y hasNext( ). El método next( ) obtiene el siguiente elemento del flujo de datos. El método hasNext( ) verifica si el flujo de datos todavía posee elementos, en caso afirmativo regresa true, de lo contrario regresa false. Console: La clase Console permite recibir flujos de datos desde la línea de comandos (entrada estándar). Se encuentra dentro del paquete java.io. Entre los métodos importantes que posee se encuentran: (enter). (enter), ocultando los caracteres como lo hace el sistema operativo que se utilice. Bibliografía: o o o o o Universidad distrital francisco de caldas. Ingenieria de sistemas. Archivos en java (2013) [Online]. Available: https://ingenieria.udistrital.edu.co/pluginfile.php/39198/mod_resource/content/1/7.%20 Archivos%20en%20Java.pdf#:~:text=Archivos%20en%20Java.,2013&text=Una%20tarea%20com%C3%BAn%20en%20programaci%C3%B3n,propio %20conjunto%20espec%C3%ADfico%20de%20m%C3%A9todos Microsoft Word – 4. Manejo básico de archivos en Java.docx. J.M. Gimeno y J.L. González (2011) [Online]. Available: http://ocw.udl.cat/enginyeria-i-arquitectura/programacio-2/continguts-1/4-manejobai81sico-de-archivos-en-java.pdf Geeknetic – software. Los archivos [Online]. Available: https://www.geeknetic.es/Guia/91/Los-archivos-tipos-extensiones-y-programas-parasu-uso.html Universidad nacional autonoma de Mexico, facultad de ingeniería. M. Angélica Nakayama C. e Ing. Jorge A. Solano Gálvez. Manejo de archivos [Online]. Available: http://profesores.fi-b.unam.mx/annkym/LAB/poo_p11.pdf Deitel Paul, Deitel Harvey. Como programar en Java, Septima Edición. México Pearson Educación, 2008