Вы находитесь на странице: 1из 57

Universidad tecnológica de panamá

Facultad de ingeniería de sistemas


computacionales.

DESARROLLO
DE SOFTWARE II
Preparado por:
Msc. Ludia B. Gómez de Meléndez.
Departamento de Programación y Análisis
de Sistemas
Capitulo III
FUNDAMENTOS DE ARCHIVO.
III. FUNDAMENTO DE ARCHIVO.
3.1. Definición de Archivos
3.2. Elementos que conforman un archivo
3.2.1. Campos
3.2.2 Registros
3.2.3. Organización
3.3.3.1. Tipos de archivos
3.3.3.2. Tipos de acceso
3.3. Manipulación
3.3.1. Adición
3.3.2 Modificación
3.3.3 Consulta
3.3.4. Eliminación
3.4. Archivos en Java
3.4.1. La clase File

Desarrollo de Software III


3
III. FUNDAMENTO DE ARCHIVO.

CONTINUACION

3.4.1.1 Constructores
3. 4.1.2. Métodos
3.5. Fundamento de los Flujos de Entrada y Salida para Archivos
3.5.1. Manipulación de Archivos y Manejos de Excepciones
3.5.1.1 Archivos secuenciales
3.5.1.1.1 Flujos de Bytes y encadenamientos
3.5.1.1.2 Flujos de Caracteres y encadenamientos

Desarrollo de Software III


4
III. FUNDAMENTO DE ARCHIVO.
OBJETIVOS.

 Identificar la diferencia que implica el uso de la clase File y


BufferedReader, FileReader, FileWriter y PrintWriter en la
solución del problema.
 Manejar las excepciones al emplear archivos, en el lenguaje Java
 Utilizar las clases BufferedReader, FileReader, FileWriter y
PrintWriter en la solución de problema.
 Identificar la diferencia entre el emplear flujo de Byte y flujo de
caracteres, en el lenguaje Java
 Desarrollar aplicaciones que manejen los conceptos de archivos,
usando las clases BufferReader, FileReader, FileWrites y
PrintWriter, en el lenguaje Java con un 100% de efectividad

Desarrollo de Software III


5
III. FUNDAMENTO DE ARCHIVO.
Que son los archivos.
Comencemos definiéndola como una estructura de datos compuesta,
conformada por un conjunto de registros relacionados entre sí, con
características comunes, organizados para un propósito específico y
que se encuentran almacenados en un dispositivo de
almacenamiento externo.

datos
registros

ced carre indice

Desarrollo de Software III 6


III. FUNDAMENTO DE ARCHIVO
Como estructura de datos, los archivos permiten el almacenamiento
permanente y la manipulación de un gran número de datos.

ELEMENTOS QUE CONFORMAN UN ARCHIVO.


 Campos ( cedula, nombre, carrera, índice)
 Registros : registro de estudiante.

 ORGANIZACIÓN DE UN ARCHIVO.
Se refiere a la forma como se encuentran los registros almacenados en el
archivo. En los archivos de datos se pueden destacar dos organizaciones
fundamentales, la secuencial y la directa o aleatoria.

Desarrollo de Software III 7


III. FUNDAMENTO DE ARCHIVO.
ARCHIVO DE ORGANIZACIÓN SECUENCIAL.
Los registros se almacenan secuencialmente es decir, consecutivamente uno
al lado del otro, sobre el dispositivo de almacenamiento externo.
Principio del
Reg-1 archivo
Reg_2
Reg-3

Fin del archivo


Reg -n

Los registros se graban consecutivamente cuando el archivo se crea. Y


una vez creados se pueden acceder secuencialmente cuando se leen o
escriban sobre ellos.
Los archivos de organización secuencial en Java contienen en su
último registro el valor de -1 para indicar que se ha alcanzado el fin
del archivo.

Desarrollo de Software III


8
III. FUNDAMENTO DE ARCHIVO
ARCHIVO DE ORGANIZACIÓN DIRECTA O ALEATORIA.

Un archivo está organizado en modo directo cuando el orden


físico no se corresponde con el orden lógico. Los datos se sitúan
en el archivo y se accede a ellos directamente mediante su
posición es decir el lugar relativo que ocupan.

Lugar Relativo = CLAVE + REGISTRO


Debe ser programada la relacion clave-registro

Desarrollo de Software III


9
III. FUNDAMENTO DE ARCHIVO
TIPOS DE ACCESO.
ACCESO SECUENCIAL.
Los registros son accesados secuencialmente uno detrás del otro, es
decir, en forma consecutiva (sin saltar ningún registro).

ACCESO DIRECTO.
Los registros son accesados directamente a través de una clave del 0
a n, es decir, permite posicionarse sobre un registro determinado en
una posición relativa (0 a n) dentro del archivo, sin que sea necesario
recorrer los anteriores.
a) b).

Desarrollo de Software III


10
III. FUNDAMENTOS DE ARCHIVO.
Operaciones Básicas sobre los Archivos.
Las operaciones básicas que se realizan sobre los archivos son:
 Creación
 Abrir
 Manipulación.
 Cerrar

1. CREACION.
Para crear un nuevo archivo se necesita contar con los siguientes
datos:
a). Nombre del archivo: es un nombre de identificador válido
b). Ubicación: indica el lugar donde se ubicará el archivo una vez
creado.
d). Organización del archivo: tipo de organización del archivo.

Desarrollo de Software III 11


III. FUNDAMENTOS DE ARCHIVO.
PROCESO DE CREACIÓN

CREACIÓN ARCH
REGISTROS

ARCHA

Al crear un archivo se puede presentar una serie de errores entre los que
podemos destacar los siguientes:

Otro archivo con el mismo nombre ya existía en el soporte


•No existe espacio disponible en el dispositivo de almacenamiento.
Uno o más de los parámetros de entrada de las instrucciones son
erróneos.

Desarrollo de Software III 12


III. FUNDAMENTOS DE ARCHIVO.
2. APERTURA DE ARCHIVOS.

En este caso se pretende abrir un archivo ya existente en disco para


procesarlo, ya sea cargar o grabar datos en sus registros, o leer algún
registro en especial para mandarlo a una variable del tipo de la
variable que está siendo trabajada.

3. CERRAR ARCHIVOS:

Su propósito es permitir al usuario detener el uso del archivo para


ejecutar esta operación solo se debe conocer el nombre del archivo
que se desea cerrar y que previamente se debió abrir.

Desarrollo de Software III

13
III. FUNDAMENTOS DE ARCHIVO.
4. MANIPULACIÓN.

Son las operaciones que sufre el archivo durante su vida, desde su creación
hasta su eliminación o borrado. Involucra operaciones directamente
realizadas sobre uno, algunos o todos los registros del archivo. como lo son:

 Adición: crear nuevos registros en el archivo

 Modificación: alterar el contenido de los registros existentes

 Consulta: ver la información de todos o de un registro en particular .

 Eliminación: quitar uno o todos los registros de un archivo

Antes de iniciar el estudio de las clases que manejan archivo en Java,

Desarrollo de Software III


14
III. FUNDAMENTOS DE ARCHIVO.
3.3. CLASE FILE.
Veremos a la clase File, que nos proporciona información acerca de los
archivos, de sus atributos, de los directorios y subdirectorios que lo conforman.
Además posee un conjunto de métodos que nos permite conocer información de
los archivos antes de ser manipulados.

 CONSTRUCTORES.
Los objetos File se crean mediante los siguientes constructores:

• public File(String nom_dir)


• public File( String nom_dir, String nombre_archivo)
• public File(File obj_dir, String nombre_archivo)

nom_dir es el nombre del directorio nombre_archivo es el nombre del archivo y


obj_dir es un objeto File que específica a un directorio.

Desarrollo de Software III


15
III. FUNDAMENTOS DE ARCHIVO.
3.3. CLASE FILE.
EJEMPLOS:

1. File f1 = new File (“/”);


/ “/”, indica el directorio raíz de Windows

2. File f2 = new File (“dato.dat”);


// Indica la ruta relativa es decir el directorio actual, donde se está
ejecutando la aplicación
3.File f3 = new File (“/”,”autoexec.dat”);
// Indica ruta absoluta, el directorio raíz en Windows para el archivo
autoexec.dat
4.File arch = new File (f1,”autoexec.dat”);
// El objeto arch se construye con dos argumentos el directorio
asignado a f1 y un nombre de fichero; arch se refiere al mismo
archivo que f3

Desarrollo de Software III


16
III. FUNDAMENTOS DE ARCHIVO.
3.3. METODOS DE LA CLASE FILE
METODO DESCRIPCIÓN
public String getName( ) Devuelve el nombre del archivo
referenciado por el objeto

public String getParent( ) Devuelve el nombre del directorio padre


public String getAbsolutePath( ) Devuelve la ruta absoluta del archivo
public String getPath ( ) Devuelve la ruta relativa.
Devuelve true si se puede escribir en el archivo o
public boolean canWrite( ) directorio.
public boolean canRead( ) Devuelve true si se puede leer desde el archivo o
directorio
public boolean isFile( ) Devuelve true si el archivo representado por el objeto
file es un archivo normal.
public boolean isDirectory( ) Devuelve true si el archivo representado por
el objeto file es un directorio.
public booleans isAbolute Devuelve true si el directorio en que se encuentra el
archivo viene determinado por su camino absoluto y
false si por su camino relativo.
public String[ ] list ( ) Devuelve un array con los nombres de los archivos y
directorios existentes en el directorio especificado por
el objeto File.

Desarrollo de Software III


17
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE
import java.io.*;
public class Ejemplosfile {
public static void main(String[] args) {

File f1 = new File ("c:/Users/Ludia/Desktop/"); // RUTA ABSOLUTA

File f2 = new File ("ciclos.java"); // RUTA RELATIVA DEL ARCHIVO

// Fe f3 = new File ("/","Nodos.java"); // DIRECTORIO RAIZ DE WINDOWS

File f3 = new File ("/","Users");


File f5 = new File (f1, "cartaDios.txt"); // DIRECTORIO DONDE ESTA EL
EL ARCHIVO CARTADIOS.TXT

Ejemplos de los 3 constructors con los cuales puede trabajar la clase FILE..

Desarrollo de Software III


18
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE
if (f2.exists()){
System.out.println("Nombre del archivo "+f2.getName());
System.out.println("Camino "+f2.getPath());
System.out.println("Camino absoluto "+f2.getAbsolutePath());
System.out.println("Se puede escribir "+f2.canRead());
System.out.println("Se puede leer "+f2.canWrite());
System.out.println("Tamaño "+f2.length()); }

if (f5.exists()){
System.out.println("Nombre del archivo "+f5.getName());
System.out.println("Camino "+f5.getPath());
System.out.println("Camino absoluto "+f5.getAbsolutePath());
System.out.println("Se puede escribir "+f5.canRead());
System.out.println("Se puede leer "+f5.canWrite());
System.out.println("Tamaño "+f5.length());
}
Desarrollo de Software III
19
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE

if (f3.isFile( ) ){
System.out.println("\n ES UN ARCHIVO \n Nombre del archivo "+f3.getName());
System.out.println("Camino "+f3.getPath());
System.out.println("Camino absoluto "+f3.getAbsolutePath());
System.out.println("Se puede escribir "+f3.canRead());}

else if (f3.isDirectory() )
{
System.out.println("\n ES UN DIRECTORIO \n NOMBRE DEL
DIRECTORIO"+f3.getName());
System.out.println("Camino "+f3.getPath());
System.out.println("Camino absoluto "+f3.getAbsolutePath());
System.out.println("Se puede escribir "+f3.canRead());}
}
}

Desarrollo de Software III


20
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE

En este ejemplo vemos al metodo list de la clase File, que permite devolver
un array con los nombres de los archivos y directorios existentes en el
directorio especificado
import java.io.*;
class DirRaiz {
public static void main(String[] args) {
int i;
String bus;
File f3 = new File ("/");//DIRECTORIO RAIZ DE WINDOWS
File f5 = new File (".");// DIRECTORIO ACTUAL
String[] listaArchivos;
listaArchivos =f3.list(); //METODO LIST DE LA CLASE FILE
for( i=0; i<listaArchivos.length; i++){
if (listaArchivos[i].endsWith(".java")) // METODO endsWith VERIFICA SI LA SUBCADENA .java SE
ENCUENTRA EN CADA CADENA
System.out.println(listaArchivos[i]); }
}}

Desarrollo de Software III


21
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE

En este ejemplo vemos al metodo list de la clase File, que permite devolver
un array con los nombres de los archivos y directorios existentes en el
directorio especificado import java.io.*;
class DirRaiz {
import java.io.*; public static void main(String[] args) {
public class DirRaiz { int i;
public static void main(String[] args) String bus;
File f3 = new File ("/");//DIRECTORIO RAIZ DE
{ WINDOWS
int i; File f5 = new File (".");// DIRECTORIO ACTUAL
String bus; String[] listaArchivos;
File f3 = new File ("/"); listaArchivos =f3.list(); //METODO LIST DE LA
String[] listaArchivos=f3.list(); CLASE FILE
for( i=0; i<listaArchivos.length; i++){ for( i=0; i<listaArchivos.length; i++){
bus = listaArchivos[i]; if (listaArchivos[i].endsWith(".java")) //
METODO endsWith VERIFICA SI LA SUBCADENA
if ( bus.endsWith(".java")){ .java SE ENCUENTRA EN CADA CADENA
System.out.println(bus); } } System.out.println(listaArchivos[i]); }
}} }}

Desarrollo de Software III


22
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE

import java.io.*;

class Directorio {
// File f1 = new File ("C:/Users/Ludia/PRIMERSEMESTRE2017/marcacion.txt");
// Indica ruta absoluta, el directorio raíz en windows para el archivo
marcacion.txt
File f1;

Directorio (){
f1 = new File ("carta.txt");// Ruta relativa donde se encuentra la aplicación
}
public String buscar () {
String resp= "";
if(f1.exists()){
resp = resp + "Nombre del archivo "+f1.getName()+"\n";
resp = resp + "Camino "+f1.getPath()+"\n" ;

Desarrollo de Software III


23
III. FUNDAMENTOS DE ARCHIVO.
3.3. EJEMPLOS DE LA CLASE FILE

resp = resp + "Camino absoluto "+f1.getAbsolutePath()+"\n" ;


resp = resp + "Se puede escribir "+f1.canRead()+"\n" ;
resp = resp + "Se puede leer "+f1.canWrite()+"\n" ;
resp = resp + "Tamaño "+f1.length()+ " bytes" +"\n" ;
}
else resp = "NO EXISTE ESE ARCHIVO";
return resp;
}}

Ahora iniciemos con la clases de flujo de cadenas que leen y


graban en archivos secuenciales

Desarrollo de Software III


24
III. FUNDAMENTOS DE ARCHIVO.
Para trabajar con archivos en disco al igual que en los flujos estándar, usted
requiere importar al paquete java.io.*.

1.1. FLUJOS DE ENTRADA / SALIDA


En Java un archivo de datos es una secuencia de bytes como se muestra en la
figura, que se guarda en disco y que puede actuar como origen o como
destino de un flujo. El desarrollador es el encargado de ordenar y darle
sentido a esa secuencia. En este punto vamos a estudiar los flujos que tienen
como destino un archivo.
0 1 2 3 4 5 6 7 8 9 ... n-1
Marcador de
fin de archivo
Secuencias de caracteres n bytes

Todo archivo presenta un inicio (0) y un final (n-1). El marcador de fin de


archivo de Java es de -1 y lo maneja el último registro, en archivos de
organización secuencial.
Desarrollo de Software III
25
III. FUNDAMENTOS DE ARCHIVO.
RECORDEMOS:

Un flujo, o stream, es una conexión entre un programa y una fuente o destino de


datos. Un flujo de entrada maneja los datos que fluyen al programa. Un flujo de
salida maneja los datos que fluyen del programa a un dispositivo externo.

En el ejemplo es un flujo de datos, que va desde un dispositivo de entrada a


la memoria y de la memoria a otro dispositivo externo, ambos proceso
manipulados por un programa. Hasta el momento se ha trabajado con los flujos de
System.in y System.out, los cuales son creados automáticamente cuando se
ejecuta un programa Java, a través de las clases de flujo de cadenas estudiadas
(BufferedReader e InputStreamReader), de la clase base Reader

Desarrollo de Software III


26
III. FUNDAMENTOS DE ARCHIVO.
Por lo tanto Java puede manejar streams de bytes y streams de
caracteres con archivo.
Los flujos de caracteres se usan para manipular datos legibles por humanos
(por ejemplo un fichero .txt).
Los flujos de bytes se usan para manipular datos binarios, legibles solo por la
máquina (por ejemplo un fichero .exe)

Para entender la diferencia entre streams de bytes y streams de caracteres,


necesitamos entender la diferencia entre un byte y un carácter . El uso de uno u
otro depende de lo que se desea representar, lo importante es saber que la
representación mas interna será siempre en byte.

Desarrollo de Software III


27
III. FUNDAMENTOS DE ARCHIVO.

Flujo de Byte Flujo de caracteres


Pensado para ser leído por un programa Pensado para ser leído y/o creado por una persona

Por qué trabajar flujo de caracteres en lugar de flujo de byte?


La importancia de flujo de caracteres radica en que Java:

 Utiliza Unicode, al utilizarse 8-bits no es posible emplear muchos caracteres


disponibles en Unicode,

Desarrollo de Software III 28


III. FUNDAMENTOS DE ARCHIVO.
 Debido a que las clases Writer poseen mayor velocidad de ejecución a
diferencia de sus contra partes InputStream y OutputStream. A continuación
iniciamos el estudio de archivos manejados a través de flujo de caractares.

CLASES DE ENTRADA/SALIDA DE JAVA.


Las librerías de clases de Java para manejar flujos se agrupan según:

 Sirvan para leer o escribir a un flujo y,


 el tipo de dato que leen o escriben (bytes o caracteres).

Por lo cual las clases base de la librería son InputStream y Reader para
lectura, y OutputStream y Writer para escritura, como se resume en la
tabla #1

Desarrollo de Software III


29
III. FUNDAMENTOS DE ARCHIVO.
Tipo de flujo Bytes (8 bits) Caracteres (16 bits)

Leen de un stream InputStream Reader


Escriben a un stream OutputStream Writer

Tabla #1. Resumen de clases de Lectura/Escritura

A continuación vemos el conjunto de clases y subclases de Reader y Writer


sobre las cuales se va a trabajar, archivos secuenciales en Java.

Tabla #1. Resumen de las clases de Java

Desarrollo de Software III 30


III. FUNDAMENTOS DE ARCHIVO.
ARCHIVOS SECUENCIALES.

Los archivos de organización secuencial en Java pueden ser de tipo texto (.txt) o
de datos (.dat) y sólo permiten el acceso secuencial de registros. Además este
tipo de archivo no puede abrirse simultáneamente para lectura y escritura (R/W).

Cuando un archivo secuencial se abre para lectura o escritura un puntero de


datos imaginario se coloca al principio del archivo, para realizar los proceso que
sobre el se requiera, eso si, si se escribe sobre el archivo y este existía se
perderá cualquier información almacenada en el mismo; sin embargo si el
puntero se coloca al final entonces se pueden añadir nuevos registros
Puntero imaginario

Desarrollo de Software III


31
III. FUNDAMENTOS DE ARCHIVO.
Manipulación de archivo secuenciales y manejo de
excepciones
Cuando se habla de que los archivos secuenciales pueden ser de
texto o binarios esto tiene que ver con la forma en la cual son
almacenados en los dispositivos.
MODO TEXTO.
En este caso los datos son almacenados usando código ASCII y por tanto
son plenamente visibles usando cualquier editor.

Desarrollo de Software III 32


III. FUNDAMENTOS DE ARCHIVO.
Manipulación de archivo secuenciales y manejo de
excepciones
MODO BINARIO.
En este caso los datos son almacenados en notación hexadecimal y por lo tanto
se requiere de un editor binario para reconocerlos; sin embargo un archivo
binario es mas compacto que un archivo texto.

Desarrollo de Software III 33


MANIPULACIÓN DE ARCHIVO
SECUENCIALES Y MANEJO DE
EXCEPCIONES.

Concluyendo un archivo de texto sólo almacenan datos de tipos carácter o


cadenas de caracteres, (flujo de carácter)

A diferencia de los archivos de texto, en los archivos binarios se


almacenan datos de todo tipo (char, long, float, int, etc.).
Los tipos de datos que se almacenan en estos archivos se guardan de
manera binaria, de acuerdo a la extensión que tengan los tipos de datos,
(flujo de byte)

Indistintamente del flujo utilizado, los datos se guardan de manera secuencial, en


el archivo, es decir, uno detrás de otro.
Cuando se desea acceder un registro, se tiene que leer cada registro, hasta
encontrar aquel que se desea.

Desarrollo de Software III 34


MANIPULACIÓN DE ARCHIVO SECUENCIALES
Y MANEJO DE EXCEPCIONES.

Las clases Reader y Writer tienen subclases que permiten manipular un


archivo estableciendo un flujo de caracteres a/desde él

Las subclases de Reader y de Writer que permiten abrir, crear, escribir, leer
o cerrar un archivo estableciendo un flujo de caracteres, son la FileReader y
FileWriter. A continuación presentaremos estas subclases
Al momento de manipular a los archivos se pueden realizar procesos tales
como:

 Apertura
 Lectura o escritura
 y por último deben ser cerrados.

Desarrollo de Software III

35
MANIPULACIÓN DE ARCHIVO SECUENCIALES
Y MANEJO DE EXCEPCIONES.
MODO DE APERTURA.
Utilizaremos a la clase Reader y dentro de ella a la subclase FileReader los
objetos instanciados de esta clase representan archivos de texto o datos de
sólo lectura que se acceden de forma secuencial.
Pasos a seguir:
Se crea el objeto de la clase FileReader llamando al constructor, al que se
le pasa el nombre del archivo o bien el objeto de la clase File .

Formatos:
 public FileReader(File nombre_objeto) throws FileNotFoundException

Este constructor utiliza un objeto de la clase File que maneja al nombre


del archivo.

Desarrollo de software III 36


MANIPULACIÓN DE ARCHIVO SECUENCIALES
Y MANEJO DE EXCEPCIONES.
 public FileReader(String ruta_archivo) throws FileNotFoundException

Este constructor maneja directamente el nombre del archivo con su ruta


especificada.
Ambos constructores generan una excepción FileNotFoundException, que
al dispararse indica que el archivo no existe o que no se encuentra en el
directorio de trabajo del programa

2. Veamos la apertura del archivo utilizando ambos formatos


FileReader nombre del objeto
Nombredelobjetode FileReader = new FileReader (“ruta y nombre del
archivo”)
FileReader archa
archa=new FileReader("teste.txt”); o

Desarrollo de Software III 37


MANIPULACIÓN DE ARCHIVO SECUENCIALES
Y MANEJO DE EXCEPCIONES.
FileReader archa = new FileReader("teste.txt”);
Si utilizamos a un objeto FileReader envuelto en un objeto File
tendríamos lo siguiente:

FileReader archa = new FileReader(obj) 

LECTURA.

Se lee mediante read los caracteres del flujo de entrada, hasta llegar
al final (la función read devuelve entonces -1), y se escribe dichos
caracteres en el flujo de salida mediante println o write si va a un
dispositivo de almacenamiento. Cuando hace lecturas recuerde
controlar excepciones de IOException en este proceso.

Desarrollo de Software III 38


MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
El método read (): de la clase FileReader devuelve un int que contiene
el valor char del carácter leído. Si en la lectura () el método devuelve -1,
no hay más datos para leer en el FileReader, y se puede cerrar.

while((c=archa.read())!=-1){
sal= sal + (char) c;}
EJEMPLO:

public void leer(){


try { int c;
while((c=archa.read())!=-1){
sal = sal + (char) c;
} }
catch (IOException error){
throw error; } }

Desarrollon de Software III 39


MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.

Finalmente, se cierra el flujo llamando a su respectiva función close en


bloques try ... catch. Cada archivo abierto ocupa recursos del sistema,
por tanto debemos cerrar cada archivo que deja de utilizarse:
archa.close();

void cerrar()
{ try {archa.close();}
catch (IOException e)
{ throw e; } }

Desarrollo de Software III 40


MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
import java.io.*;
class LeerFlujoByte{
private FileReader archa;
LeerFlujoByte( ) throws Exception {
try {
archa = new FileReader ("copia.txt"); }
catch (FileNotFoundException error){
throw error; } }
String leer()throws Exception{
String sal ="";
int c;
try {
while((c=archa.read())!=-1){
sal= sal + (char) c; } }
catch (FileNotFoundException error){
throw error; }
return sal; }
Desarrollo de Software III
41
MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
void cerrar() throws Exception
{ try {archa.close();}
catch (Exception e)
{ throw e; } }
}
class ArchaCaracterM { public static void main(String [] args) {
BufferedReader br = new BufferedReader (new InputStreamReader
(System.in));
String nom= " ", salida ="";
try {
LeerFlujoByte obj = new LeerFlujoByte();
salida= obj.leer();
System.out.println (salida);
obj.cerrar(); }
catch (Exception e){
System.out.println ("ERROR DE ENTRADA/SALIDA"+e);
} }}
Desarrollo de Software III
42
MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
ESCRITURA.
Se desea ahora grabar datos en el archivo para ello se utiliza a la clase
FileWriter: los objetos instanciados de esta clase representan archivos de
texto o datos para escritura de forma secuencial.

APERTURA.
En la apertura se pueden utilizar los siguientes constructores:

public FileWriter(File nombre_objeto) throws IOException


public FileWriter (String ruta_archivo) throws IOException
public FileWriter(String ruta_archivo, boolean añadir) throws
FileNotFoundException
Con los dos primeros constructores si el archivo existe y se abre de esta
forma se destruye y la escritura comienza desde el principio. La
IOException se lanza cuando ocurre un error con el archivo.

Desarrollo de Software III


43
MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.

El último constructor permite añadir datos a un archivo existente, cuyo


nombre viene especificado por la ruta_archivo. La
FileNotFoundException se lanza cuando el archivo no existe.

Ejemplo, se crea un objeto de las clases FileReader y otro de la clase


FileWriter,
File obj = new File (“prueba.txt”)
FileReader archa = new FileReader (obj)
FileWriter salida= new FileWriter("copia.txt");

Desarrollo de Software III 44


MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.

LECTURA y ESCRITURA.

Se lee mediante read los caracteres del flujo de entrada, hasta llegar al
final (la función read devuelve entonces -1), y se escribe dichos
caracteres en el flujo de salida mediante write.

while((c=entrada.read())!=-1)
{ salida.write(c);
CIERRE. }
Finalmente, se cierran ambos flujos llamando a sus respectivas funciones
close en bloques try ... catch
archa.close();
salida.close();

Desarrollo de Software III


45
MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
import java.io.*;
class GrabarFlujoByte{
private FileWriter salida;
private FileReader archa;
GrabarFlujoByte() throws Exception {
try { archa = new FileReader ("copia.txt"); }
catch (FileNotFoundException error){
throw error;}
try { salida = new FileWriter ("nuevo.txt"); }
catch (IOException error){
throw error; }}
public void leer() throws Exception{
int c;
try { while((c=archa.read())!=-1){
if (c=='1' )
salida.write('3');
else salida.write(c); }
}
catch (IOException error) { throw error; } }
Desarrollo de Software III

46
MANIPULACIÓN DE ARCHIVO SECUENCIALES Y
MANEJO DE EXCEPCIONES.
void cerrar() throws Exception

{ try {archa.close();
salida.close();}
catch (IOException e)
{ throw e; }
} }
class Grabar { public static void main(String [] args) throws IOException {
try {
GrabarFlujoByte obj = new GrabarFlujoByte();
obj.leer();
obj.cerrar();}
catch (Exception e){
System.out.println ("ERROR DE ENTRADA/SALIDA"+e);
} } }

Desarrollo de Software III 47


ENCADENAMIENTO DE FLUJOS DE
CARACTERES
La clase FileReader para la lectura de flujo de caracteres en un
archivo secuencial se le puede encadenar a una clase
BufferedReader permitiendo utilizar el método readLine( ) para la
lectura de una cadena.
ENCADENAMIENTO DE LA FILEREADER Y BUFFEREDREADER:

Esta clase actúa como filtro envolviendo o encadenando un flujo de entrada


para así permitir la lectura de cadenas desde un archivo

Desarrollo de Software III 48


ENCADENAMIENTO DE FLUJOS DE
CARACTERES
APERTURA.

Para abrir un archivo con encadenamiento de la FileReader y la


BufferedReader se hace de la siguiente forma
FileReader f;
BufferedReader s;

f = new FileReader (“ruta_archivo”);


s = new BufferedReader ( f );

Los constructores de estas clases lanzan una FileNotFoundException,


en caso de que el archivo no existe. La excepción se puede controlar
con throws o con try/catch (FileNotFoundException e).

Desarrollo de Software III 49


ENCADENAMIENTO DE FLUJOS DE
CARACTERES
LECTURA.
La lectura se puede hacer con el método siguiente:
public String readLine ( )

El método readLine(), devuelve null, de esta forma podemos preguntar por este
valor para controlar el fin del archivo. Este método lanza una IOException en
caso de un error al leer.
boolean leer () throws Exception
{ boolean fin = false;
try
{ced=e.readLine ();
nom=e.readLine();
edad=e.readLine ();
// para controlar fin de archivo se verifica si el registro es null
if (ced == null & nom == null & edad == null)
fin = true; }

Desarrollo de Software III 50


ENCADENAMIENTO DE FLUJOS DE
CARACTERES

catch (IOException e)
{throw e; }
return fin; }
String traer()
{ return ced;
}

En estos segmentos se observa como se realiza la lectura de datos hasta


fin de archivo en un archivo de organización secuencial y con
encadenamiento de la FileReader y la BufferedReader .

Desarrollo de Software III

51
ENCADENAMIENTO DE FLUJOS DE
CARACTERES
ENCADENAMIENTO DE LA FILEWRITER Y LA PRINTWRITER.

Esta clase actúa como filtro envolviendo un flujo de salida para así permitir la
escritura( CREAR UN ARCHIVO). Los objetos instanciados a este
encadenamiento representan archivos de sólo escritura que se acceden de
forma secuencial
APERTURA.
Para abrir un archivo con encadenamiento de la FileWiter y la PrintWriter se
hace de la siguiente forma:
FileWriter f;
PrintWriter s;

f = new FileWriter (“ruta_archivo”);


s = new PrintWriter( f);

Desarrollo de Software III


52
ENCADENAMIENTO DE FLUJOS DE
CARACTERES

Si el archivo existe y se abre de esta forma se destruye y la


escritura comienza desde el principio. En este caso la excepción a
utilizar debe ser IOException y se lanza cuando ocurre un error con
el archivo.
ESCRITURA.
La escritura se puede hacer con los métodos siguientes:
public print ( String c)
public println (String c)
Estos dos métodos lanzan una IOException en caso de un error al
escribir en el archivo.

CIERRE.
El cierre funciona igual al explicado con el encadenamiento de la
FileReader y la BufferedReader.

Desarrollo de Software III


53
ENCADENAMIENTO DE FLUJOS DE
CARACTERES
ENCADENAMIENTO DE LA FILEWRITER Y LA BUFFEREDWRITER.

Esta clase actúa como filtro envolviendo un flujo de salida para así permitir la
escritura (CREAR UN ARCHIVO). Los objetos instanciados a este
encadenamiento representan archivos de sólo escritura

APERTURA
Para abrir un archivo con encadenamiento de la FileWiter y la BufferedWriter se
hace de la siguiente forma:
FileWriter f;
BufferedWriter s;

f = new FileWriter (“ruta_archivo”);


s = new BufferedWriter( f);

Desarrollo de Software III 54


ENCADENAMIENTO DE FLUJOS DE
CARACTERES

Si el archivo existe y se abre de esta forma se destruye y la escritura comienza


desde el principio.
En este caso la excepción a utilizar debe ser IOException y se lanza cuando
ocurre un error con el archivo.

Si se desea añadir datos a un archivo existente, hay que agregarle el valor


booleano true al nombre especificado por la ruta_archivo. En este caso la
excepción a utilizar debe ser FileNotFoundException y se lanza cuando el
archivo no existe.

Desarrollo de Software III


55
ENCADENAMIENTO DE FLUJOS DE
CARACTERES

ESCRITURA.
La escritura se puede hacer con los métodos siguientes:

public abstract void write (char c[ ], int desde, int cuantos )


public void newLine( )

Estos dos métodos lanzan una IOException en caso de un error al escribir en el


archivo.
CIERRE
El cierre funciona igual a explicado con el encadenamiento de la
FileReader y la BufferedReader.

Desarrollo de Software III


56
PRÁCTICA.

1. Escriba un programa que permita almacenar los datos de estos registros en


un archivo se organización secuencial llamado “datosMet.dat”.

2. Se requiere un programa para leer cada uno de los datos del archivo
“datosMet.dat” e imprimir los mismos. Además deberá mostrar cual es la mínima
y máxima temperatura.

3. Escribe una clase que lea 10 enteros y los escriba en un archivo “salida1.txt
4. Escribe una clase que lea del archivo “salida1.txt” los 10 números enteros; los
eleve al cuadrado, y guarde los resultados en “salida2.txt”.
5. Escribe una clase que lea del archivo “salida2.txt” los 10 números enteros y
los despliegue en pantalla y determine el máximo y mínimo de los mismos.

Desarrollo de Software III 57

Вам также может понравиться