IIC1103 Introducción a la Programación. Ayudantía: Archivos



Documentos relacionados
Resumen Clase Anterior Ejercicio Clase 16 Archivos Ejemplo. ING1310 Introducción a la Computación. Archivos

Maestro Coordinador de la Carrera Gestión de la Calidad Director de la Facultad

Práctica #5: Uso de control de flujo, Excepciones y Lectura Estándar

Capítulo 8: Archivos

Flujos (streams) Programación. Licenciatura Lingüística y Nuevas Tecnologias Nadjet Bouayad-Agha

Programación Java. Introducción a Archivos de datos de Entrada

Tipos DataInputStream/DataOutputStream: L/E de datos de tipo simple y Cadenas (Strings) ObjectInputStream/ObjectOutputStream: para persistencia de obj

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Introduciendo datos desde el

Fundamentos de Computadores y Lenguajes

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Ficheros y streams. Desde el punto de vista de Java, cada fichero no es más que una secuencia o flujo de bytes [stream].

NETBEANS JAVA PROGRAMACIÓN ORIENTADA A OBJETOS

Estructura de datos y Programación

Práctica No. 2. Tipos de Datos y Entrada/Salida Estándar

Entrada y Salida de datos

String s = t.readline() 4. Si el valor leído desde teclado, se requiere almacenar en una variable de un tipo diferente a

Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Por el contrario System.in es un byte Stream sin caracteristicas de character Stream.

Ejemplos de uso de ficheros de acceso secuencial

Guía - Taller # 2 (JAVA)

Arreglos de objetos y ArrayList. Archivos en Java Transversal Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Instituto Tecnológico de Celaya

Objetivos. El alumno empleará el concepto de excepción en la programación orientada a objetos para el manejo de errores de ejecución.

Examen escrito de Programación 1

3.9 Streams y Archivos Streams Básicos 18/04/2004. API de InputStream (1/2) Streams de Bytes y Caracteres. API de OutputStream

Parte I: Programación en un lenguaje orientado a objetos

FUNDAMENTOS DE INFORMATICA

Introducción a Python Qué es Python?

PROGRAMACION I Archivos directos

HOJA DE EJERCICIOS 5 PROGRAMACIÓN CON EXCEPCIONES EN JAVA

Código Fuente. Creamos en C:\ una carpeta para ubicar el código fuente del servidor. En mi caso, he creado una carpeta denominada rmi4

Datos Elementales y formato de un programa en Java

Tema 2: EL TIPO DE DATOS ENTERO. INSTRUCCIÓN DE ASIGNACIÓN Y DE COMPOSICIÓN SECUENCIAL

Información de la lectura en un programa.

Entrada/Salida. Introducción a la computación. Juan Manuel Pérez. (en base a slides de Maximiliano Geier) 04/05/2016

Examen escrito de Programación I

Capítulo 3. Introducción a la programación. Continuar

MANUAL DE INSTALACIÓN DEL DIMM ANEXOS Y FORMULARIOS Linux

Tema 5 Sistemas Operativos En Red. Ejercicio 6 Realizar copia de seguridad, Windows Server 2008.

Manual de Instalación y Operación del Generador de Temario SPC de la Secretaría de Salud

M.C. Yolanda Moyao Martínez

SOFTWARE Microsoft Visual Studio 2005.NET FrameWork 2.0

Examen de prácticas de Programación 1

PROGRAMACIÓN EN JAVA. { una línea para definir, crear o ejecutar ; }

Soluciones al Examen de Fundamentos de Computadores y Lenguajes

Elementos Básicos de Java. LUIS MENGUAL (c)

Práctica #4: Uso de control de flujo

ALMACENAMIENTO Y RECUPERACIÓN DE UN LIBRO

CAPÍTULO 9 A R C H I V O S (FLUJOS)

Examen de prácticas de Programación 1

II Examen Parcial. Instrucciones Generales:

1. Introducción. 2. Traza remoto. 2.1 Borrar cliente antiguo de la cache de Java

PROGRAMACIÓN ORIENTADA A OBJETOS 1/7/2009. Examen de Java. Nombre: DNI: Titulación:

Ficheros conceptos. Manejo de ficheros en C. Apertura del fichero Función fopen: nombre del fichero. Apertura del fichero Función fopen

TEMA 7: Ficheros. TEMA 7: Ficheros Concepto de fichero

MANUAL DE INSTALACIÓN ACTUALIZACIÓN VERSIÓN

Sockets. Los sockets son un mecanismo de comunicación entre procesos que se utiliza en Internet.

HACER COPIAS DE SEGURIDAD EN WINDOWS

Práctica #4: Uso de control de flujo

Laboratorio Virtual. Guía básica de uso Dirección de Informática Semestre Enero mayo 2016

FUNDAMENTOS DE INFORMÁTICA

Formato para prácticas de laboratorio

Tema: Introducción al IDE de Microsoft Visual C#.

Apellidos, Nombre:...Máquina:... Especialidad:... Curso:...

Guía para el Contribuyente. MANUAL DE INSTALACIÓN DEL DIMM ANEXOS Y FORMULARIOS Linux Versión 1.10 DIMM - LINUX

Examen parcial Convocatoria de junio de 2005 FUNDAMENTOS DE LA PROGRAMACIÓN

Word 2010 Manejo de archivos

Ejercicios de Programación Tema 7. Programación Orientada a Objetos

CAPÍTULO 9 A R C H I V O S (FLUJOS)

Laboratorio. Instalación de Visual Studio Community. Back To Basics Instalando Visual Studio Community. Versión: 1.0.

Tema 4. Excepciones en Java

!"# $! "# % &'& $()! ( *

AGRUPANDO OBJETOS (Parte-II)

Curso de Java Introducción a la Programación I

Estructuras de Datos Clase 22 Ordenamiento externo

Si bien hay gran cantidad de excepciones, todas derivan de la clase Exception, además de las excepciones ya manejadas, se pueden crear propias.

AR 1 T. Tutorial 1. Introducción a Arduino Controlando un LED.

Unidad II. Fundamentos de programación en Java. Ing. José Luis Llamas Cárdenas

Sesión 4 Introducción a Stata III

Solucion al Examen de Fundamentos de Computadores y Lenguajes

Objetivos. El alumno conocerá y aplicará el concepto de archivo para el almacenamiento y recuperación de datos persistentes.

Fundamentos de Programación

Open, Close, Freefile. Write# y Input#. Abrir y cerrar ficheros con Visual Basic. Leer y guardar datos. Ejemplos prácticos.

Variables. a 9 4. Ahora ya es posible realizar operaciones con los números introducidos por teclado y guardados en las variables a y b.

Introducción a Java. Dr. (c) Noé Alejandro Castro Sánchez

Programación Orientada a Objetos

Examen de prácticas de Programación 1

Guia#12: Tema: Archivos en C#.

EJERCICIOS MANEJO DE ESTRUCTURAS BÁSICAS SCRIPTS

int[] nombrearray1; int nombrearray2[];

Archivos en lenguaje C

CAPÍTULO 8 Persistencia de Datos

Conceptos básicos de Orientación a Objetos, manejo con Eclipse.

Solución al Examen de Fundamentos de Computadores y Lenguajes

Transcripción:

Resumen teórico Pontificia Universidad Católica de Chile Escuela de Ingeniería Departamento de Ciencia de la Computación IIC1103 Introducción a la Programación Ayudantía: Archivos Profesores: Daniel Langdon y Carla Vairetti Generalmente cuando diseñamos un programa nos encontramos con la necesidad de guardar la información que éste genera a un archivo, o que la información que éste necesita para funcionar sea leída desde un archivo. El querer almacenar información es algo muy común, puesto que con ello podemos guardar la información que el programa genera volátilmente, y que de otra manera se perdería al cerrarlo. Ejemplos de esto son los reproductores de video, editores de imágenes, editores de texto, etc. Se llama input a la información recibida desde un agente externo, y output la información que es expuesta al exterior. Los lenguajes de programación modernos generalmente ofrecen herramientas para poder comunicarse con el exterior, acciones de I/O, especificamente Java ofrece una gran cantidad de clases que encapsulan los procesos para lectura y escritura de información, escondiendo lo tedioso que podría ser, simplificando la labor del programador. Éstas clases son capaces de interactuar con múltiples fuentes, como son archivos, internet, linea de comando, la pantalla, etc. Nosotros ya hemos realizado acciones de I/O, por ejemplo mostrar mensajes en pantalla, y pedir al usuario que ingrese cierto dato. La lectura de archivos es un poco distinta, puesto que tiene ciertas reglas. Sistema de Archivos Los archivos dentro de un computador están almacenados en forma jerárquica: Unidades Físicas y Lógicas: Son el punto de partida del sistema de archivos. Por ejemplo el disco C:/ en Windows. Carpetas: Se encuentran dentro de las unidades o de otras carpetas, tienen una función de organización. Archivos: Se encuentran dentro de las unidades o de carpetas. Estos son los elementos que guardan la información. Debido a ésto, los archivos tienen rutas asociadas que indican la unidad, carpeta/s y el nombre del archivo correspondiente. Por ejemplo, para acceder a un archivo llamado bar.txt en la carpeta foo del disco C, la ruta sería C:/foo/bar.txt. A ésto llamaremos ruta absoluta puesto que incluye la ruta completa desde la unidad, no se asume nada. A diferencia de la ruta absoluta, existen las llamadas rutas relativas, estas corresponden a la ruta desde la carpeta actual hasta el archivo. Por ejemplo, si nos encontramos dentro de la carpeta foo (del ejemplo anterior), la ruta hasta el archivo bar.txt es simplemente bar.txt, puesto que ya nos encontramos en la carpeta. Si nos encontraramos en el disco C la ruta al mismo archivo sería foo/bar.txt. IIC1103 Ayudantía: Archivos 1

Además los archivos y carpetas tienen permisos asociados, estos indícan quienes pueden leer, escribir o ejecutar determinado archivo. Se debe considerar esto antes de realizar operaciones sobre archivos. Generalmente los dueños, quienes crearon el archivo, tienen todos los permisos y pueden modificar los permisos de terceros. Generalmente los archivos son guardados de forma binaria en los dispositivos de almacenamiento. Estos bits pueden ser interpretados de varias maneras: como números, como caracteres, como valores booleanos, etc. Por esto, existen las extensiones (por ejemplo.txt ), que le indican al sistema operativo (encargado de la lectura y escritura) que tipo de archivo es el que se está intentado abrir, de manera que sea interpretado con el programa correcto. Por último, se debe tener en cuenta que las acciones sobre archivos (como muchas de I/O) pueden fallar, por lo que se debe indicar a Java que cada método que utilice algún tipo de I/O puede lanzar error. Archivos en Java En Java los archivos son representados por la clase File, cuyo constructor recibe la ruta (absoluta o relativa) al archivo en cuestión. Es importante que el archivo no necesariamente debe existir, por ejemplo si queremos crear un nuevo archivo ingresamos la ruta al archivo que queremos crear, aunque éste todavía no exista. File archivo = new File(\C:/foo/bar.txt"); La clase File ofrece una variedad de métodos, entre ellos revisar persmisos y existencia del archivo. Algunos ejemplos son: boolean exists() - Indica si el archivo existe o no. boolean canread() - Indica si el usuario tiene permisos de lectura sobre el archivo. boolean canwrite() - Indica si el usuario tiene permisos de escritura sobre el archivo. boolean canexecute() - Indica si el usuario tiene permisos de ejecución sobre el archivo. boolean isfile() - Indica si el archivo es en realidad un archivo (puede ser una carpeta). boolean isdirectory() - Indica si el archivo es una carpeta (directorio) o no. La clase archivo no está incluida por defecto en los proyectos, por lo que hay que importarla del paquete java.io. import java.io.file; o import java.io.*; Para la lectura y escritura de información Java posee un tipo de clases llamadas Streams, estos representan una conección entre el programa y determinada fuente de información. Existen muchos tipos de Stream, por lo que solo veremos un par. IIC1103 Ayudantía: Archivos 2

La clase Scanner es una de las que ofrece Java para lectura. Su constructor recibe la ruta al archivo o un objeto tipo File. Scanner datain = new Scanner(\C:/foo/bar.txt"); o Scanner datain = new Scanner(archivo); Al igual que la clase archivo, ésta ofrece una gran cantidad de métodos: int nextint() - Intepreta el siguiente grupo de bits como un número entero. String next() - Interpreta el siguiente grupo de bits como una cadena de caracteres. Retorna la siguiente palabra, antes de un espacio en blanco. String nextline() - Interpreta el siguiente grupo de bits como una cadena de caracteres. Retorna la siguiente linea, antes de un salto de linea. void close() - Cierra el archivo liberandolo para que otro programa pueda utilizarlo (importante cerra los archivos siempre antes de terminar el programa) La clase Scanner viene en el paquete java.util por lo que hay que importarlo usando: import java.util.scanner; Además, como dijimos antes, la lectura puede fallar, por lo que hay que avisar a Java que el método que contiene al Scanner puede lanzar errores, esto se hace agregando la etiqueta throws IOException entre la definición del método y la llave que comienza el codigo interno. public void metodo(argumentos) throws IOException... En tanto, para escritura utilizamos la clase FileWriter, cuyo constructor, al igual que el Scanner, acepta un String con la ruta al archivo o un objeto tipo File. FileWriter dataout = new FileWriter(\C:/foo/bar.txt"); o FileWriter dataout = new FileWriter(archivo); Esta clase se utiliza para escribir caracteres, a través del método: void write(string); Además, al igual que el Scanner, debemos cerrar el Stream con el método close() y agregar la etiqueta throws IOException al método. La clase FileWriter viene en el paquete java.io. IIC1103 Ayudantía: Archivos 3

Ejemplos Problema 1: Redactor Enunciado Escriba un programa que le permita al usuario escribir texto (linea a linea) en un archivo, mostrando lo que há escrito hasta el momento. Además debe ser capáz de recordar lo escrito cuando se vuelva a iniciar el programa. Se debe salir cuando se ingrese el comando ;SALIR;. Criterios de solución Observamos que el programa debe cumplir con los siguientes requisitos: Cargar la información pasada del programa, en caso de que se haya ejecutado antes Mostrar al usuario lo escrito y pedir la siguiente linea a escribir. Repetir hasta encontrar el String ;SALIR;. Guardar lo escrito al finalizar el programa. El primer punto es fácil de lograr, solo verificar si existe el archivo a escribir, y de existir, leerlo antes de empezar a escribir. Lo que leyamos debemos guardarlo a un String que representará la información final que debe contener el archivo. Luego debemos realizar un loop, que muestre la información actual, y pida al usuario la siguiente linea a escribir. En caso de que la linea sea ;SALIR; debemos salir del loop. Finalmente debemos escribir el String guardado al archivo. Posible solución import iic1103package.usuario; import java.io.file; import java.io.filewriter; import java.io.ioexception; import java.util.scanner; public class Program public static void main(string[] args) throws IOException // Iniciamos el lector en un archivo arbitrario (llamado file en este caso) File file = new File("file"); Scanner datain = new Scanner(file); String actual = ""; Usuario.mensaje("Bienvenido a WritterIIC1103"); // Leer el archivo existente if(file.exists()) while(datain.hasnext()) actual += datain.nextline(); IIC1103 Ayudantía: Archivos 4

// Esto es para que no agregue un salto de linea extra al final del texto if(datain.hasnext()) actual += "\n"; FileWriter dataout = new FileWriter(file); String newline = ""; while(!newline.equals(";salir;")) // Si la linea es no vacia, la agrega al texto if(!newline.equals("")) actual += "\n"+newline; // Pide la siguiente linea al usuario newline = Usuario.texto(actual+"\n>"); // Una vez listo escribimos el texto al archivo dataout.write(actual); Usuario.mensaje("Gracias por usar WritterIIC1103"); // Debemos recordar cerrar los lectores y escritores datain.close(); dataout.close(); IIC1103 Ayudantía: Archivos 5

Problema 2: Leyendo al maestro Enunciado Leonardo di Ser Piero 1, uno de los más grandes genios de la humanidad, para proteger la propiedad intelectual de sus escritos (o por mala costumbre, como piensan otros) en sus cuadernos y libretas solía escribir al revés, como si estuviera viendo el reflejo de un espejo. Sabiendo esto, se le pide que diseñe un programa que traduzca los textos de Leo: se le debe pedir al usuario que ingrese el nombre de un archivo, leer línea por línea, cada una de ellas invertirla, y guardar todo en un archivo cuyo nombre debe ingresar el usuario. Criterios de solución Debemos: 1. recibir el nombre de un archivo. 2. intentar abrirlo (manejando los posibles errores). 3. leer cada una de las líneas. 4. cada una de ellas, se debe invertir. 5. escribir los datos en un archivo de salida, cuyo nombre ingresa el usuario (manejando los posibles errores). Por simplicidad, optaremos por guardar el contenido completo del archivo, luego pasar a un arreglo de Strings, donde cada posición es una línea, la que luego invertiremos. Además, manejaremos todos los posibles errores al mismo tiempo (encerrando el código en un gran try/catch). Posible solución import java.util.*; import java.io.file; import iic1103package.*; import java.io.*; public class Principal public static void main(string[] args) // alguna referencia a los archivos String entrada = Usuario.texto("Ingrese el nombre del archivo de entrada a leer"); String salida = Usuario.texto("Ingrese el nombre del archivo de salida a escribir"); File archivoentrada = new File(entrada); File archivosalida2 = new File(salida); // alguna manera de leer/escribir FileWriter escribir; Scanner lector; // variables para guardar los contenidos String contenido = "", contenidoinverso = ""; // manejar posibles errores 1 más detalles en http://es.wikipedia.org/wiki/leonardo da Vinci IIC1103 Ayudantía: Archivos 6

try lector = new Scanner(archivoEntrada); escribir = new FileWriter(archivoSalida2); // leemos cada linea while (lector.hasnext()) // incluimos el salta de linea correspondiente contenido += ( lector.nextline() + "\n"); // usamos un arreglos de Strings auxiliar String [] lineas = contenido.split("\n"); // para la cantidad de lineas for(int i = 0 ; i < lineas.length ; i++) // para cada linea // copiamos desde el final al principio, cada caracter for(int j = lineas[i].length() -1; j >= 0 ; j-- ) contenidoinverso += lineas[i].charat(j); // agregamos el salto de linea correspondiente contenidoinverso += "\n"; // escribimos en el archivo escribir.write(contenidoinverso); // cerramos las conexiones escribir.close(); lector.close(); // manejamos los errores // el archivo no se encuentra catch (FileNotFoundException e) Usuario.mensaje("No se encuentra el archivo: "+entrada); // algun error de entrada/salida catch(ioexception e) Usuario.mensaje("Error de tipo entrada/salida"); // CUALQUIER tipo de error catch(exception e) Usuario.mensaje("Error!"); IIC1103 Ayudantía: Archivos 7