You are on page 1of 39

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Facultad de Ingeniera de Sistemas e Inf rm!

tica

ASI"NA#URA #EMA $ROFESOR ALUMNO FEC%A CICLO #URNO SEMES#RE &' O()E#IVOS "ue el estu#ia$te%

Algortmica II PERSISTENCIA Carlos A. Ruiz De La Cruz Melo

2008 !

&se ' ma$i(ule los meca$ismos #e (ersiste$cia (ara registrar la i$)ormaci*$ e$ +a,a

*' IN#RODUCCION #EORICA


Normalme$te- cua$#o se co#i)ica u$ (rograma- se .ace co$ la i$te$ci*$ #e /ue el (rograma (ue#a i$teractuar co$ los usuarios #el mismo- es #ecir- /ue el usuario (ue#a (e#irle /ue realice #etermi$a#a tarea- sumi$istr0$#ole #atos co$ los /ue #e1e lle,ar a ca1o la tarea solicita#a. Se es(era /ue el (rograma los ma$i(ule #e algu$a )orma- (ro(orcio$a$#o u$a res(uesta a lo solicita#o. Por otra (arte- e$ muc.as ocasio$es i$teresa /ue el (rograma guar#e los #atos /ue se le .a$ i$tro#uci#o- #e )orma /ue al )i$alizar el (roceso- los #atos $o se (ier#a$ ' (ue#a$ ser recu(era#os e$ u$a sesi*$ (osterior. La )orma .a1itual #e .acer esto es me#ia$te la utilizaci*$ #e #is(ositi,os #e almace$amie$to secu$#ario o e2ter$o 3$ormalme$te u$ #isco4. Se llama persistencia a la ca(aci#a# #e u$a e$ti#a# #e trasce$#er el tiem(o o el es(acio. E$ la (rogramaci*$ (re,ia al (ara#igma #e o1+etos esta1a re(rese$ta#a co$ la e$tra#a ' sali#a #e #atos. Es u$ co$ce(to im(orta$te- (ues (ermite /ue u$ o1+eto (ue#a ser usa#o e$ #i)ere$tes mome$tos

*'&' Flu+ s
El mo#elo m0s se$cillo #e u$ algoritmo co$siste e$ tres co$e2io$es% #atos #e e$tra#a(rocesamie$to ' #atos #e sali#a. E$tra#a ' sali#a 3 E 5 S 4 es u$ as(ecto )u$#ame$tal e$ la com(utaci*$. La com(uta#ora $o sera mu' 6til si $o (u#iera reci1ir #atos #el mu$#o e2terior ' (rese$tar los #atos com(uta#os. E$ esta secci*$ se #escri1e como 7a,a - a tra,8s #e +a,a.io ' +a,a.$io- ' otros (a/uetes relacio$a#os - (ro(orcio$a clases i$#e(e$#ie$tes (ara ma$i(ular arc.i,os ' )lu+os 3 streams 4.

2.1.2 Los flujos estndar $r fes r, Carl s A' Rui- De La Cru- Mel

&

Java al igual que cualquier otro lenguaje de programacin tiene su conjunto mtodos que le permiten captar la informacin de flujos de entrada y enviar flujos de salida por dispositivos estndar. Los flujos estndar son: Flujo de datos de entrada: o o Se realiza mediante la clase System.in y suele recibir los datos del teclado tiliza el mtodo read() para conseguir leer los caracteres del teclado Se realiza mediante la clase System.out y suele enviar los datos por pantalla tiliza el mtodo print() y println() para la salida por pantalla Se realiza mediante la clase System.err !os aseguramos que la salida va redirigida al monitor para enviar mensajes de error al usuario

Flujo de datos de salida: o o

Flujo de datos de error o o

"l flujo de entrada ms utilizado esta asociado a el teclado# veamos el siguiente ejemplo que es bastante ilustrativo. $%% % "jemplo: programa de flujos &streams' % que lee tu nombre de la l(nea de comandos % y te lo muestra por la consola de salida. % )urso de Java *sico % +aut,or -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: 2ola-scar.java %$

import java.io.%3 public class 2ola-scar 4 public static void main&String56 args' t,ro7s 8-"9ception 4 8nputStream:eader lector ; ne7 8nputStream:eader&System.in'3 *uffered:eader entrada ; ne7 *uffered:eader&lector'3 System.out.print&<)ual es tu nombre= <'3 String nombre ; entrada.readLine&'3 System.out.println&<2ola < > nombre > <?<'3 @ @$$ fin de la clase 2ola-scar La sali#a #el (rograma al e+ecutarlo co$ el coma$#o +a.a % laOscar es% Da tu $om1re% 9scari$ :;ola- 9scari$<

$r fes r, Carl s A' Rui- De La Cru- Mel

"n la siguiente figura vemos el proceso de tomar los datos del flujo estndar de entrada System.in asociado al teclado con la creacin del objeto lector de la clase InputStreamReader. Luego con el objeto lector lo utilizamos como argumento del constructor de un objeto entrada de la clase BufferReader# el cual tiene mtodos como readLine()# para leer el conjunto de bytes del buffer ,asta el final de la l(nea. Ainalmente utilizamos el mtodo println() de System.out que esta asociado al flujo estndar de salida para presentar los datos por la consola o monitor.

2.1.2.1

l!unos ejemplos de flujo estndar

"n los ejemplos siguientes# usamos el flujo estndar de entrada System.in asociado al teclado. Bodo lo que se lea de algCn flujo de entrada esta dado en bytes # los cuales son transformados a cadenas de caracteres. D"ntonces como ,acemos la lectura de algCn nCmero real o entero por teclado=. .fortunadamente e9isten mtodos de conversin de cadenas en las clases envoltorio & 7rappers ' como dou"le#alue() que convierte una cadena en formato de nCmero real a una variable primitiva de tipo double. .s( es como podemos entonces manejar los flujos de datos de bytes o caracteres a formatos binarios espec(ficos. Bambin observe que el mtodo main() se esta manejando la e9cepcin I$%&ception # para preveer algCn tipo de error en el flujo de entrada o salida. ver el ejemplo:

$r fes r, Carl s A' Rui- De La Cru- Mel

$%% % "jemplo: programa de flujos &streams' % que lee el valor del radio desde el teclado y calcula % el rea del circulo. La cadena del nCmero see lee % con un flujo de entrada que luego es convertido a % formato de nCmero de tipo double con doubleEalue&' % de la clase 7rapper Fouble . "l programa calcula el % rea del circulo en base al radio dado y presenta el % resultado por pantalla. % +aut,or -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: .rea)irculo.java %$ import java.io.%3 public class .rea)irculo4 public static void main&String56 args' t,ro7s 8-"9ception 4 8nputStream:eader lector ; ne7 8nputStream:eader&System.in'3 *uffered:eader entrada ; ne7 *uffered:eader&lector'3 System.out.print&<8ntroduce valor del radio: <'3 String te9to ; entrada.readLine&'3 Fouble 9 ; ne7 Fouble&te9to'3 double r ; 9.doubleEalue&'3 System.out.println&<"l area de un circulo de radio <> r '3 double area ; r%r%Gat,.H83 System.out.println&< es < > area'3 @ @$$ fin de la clase .rea)irculo Hara correr el programa ,ay que ejecutar la sentencia java .rea)irculo y presenta los siguientes resultados si se le da como radio el valor de 01. 8ntroduce valor del radio: 01 "l area de un circulo de radio 01.1 es I0J.0KLMNKIKOLPLI

2.1.' Los flujos (ue ofrece ja)a.io


Java ofrece dos clases abstractas para manejar los flujos de datos procedentes de equipos remotos o arc,ivos y son ja)a.io.$utputStream y ja)a.io.InputStream* a continuacin presentamos la jerarqu(a de estas clases clases . -bject o 8nputStream Q Aile8nputStream o Ailter8nputStream R R Hus,bacS8nputStream *uffered8nputStream

$r fes r, Carl s A' Rui- De La Cru- Mel

R Q Q o -utputStream Q Q Q Q o o

Line!umber8nputStream

String*uffer8nputStream *yte.rray8nputStream Hiped8nputStream Sequence8nputStream

*yte.rray-utputStream Hiped-utputStream Aile-utputStream Ailter-utputStream o o o HrintStream *uffered-utputStream Fata-utputStream

.lgunas de estas clases van a aparecer junto con algunos de sus mtodos# en los ejemplos que veremos mas adelante.

2.1.+ Flujos de "ytes Hara los ejemplos siguientes# supondremos que los objetos de tipo InputStream y $utputStream nos vienen dados# sin preocuparnos de como ,an sido creados &de ,ec,o# las clases mencionadas ya ,ab(amos dic,o que son clases abstractas que y no pueden ser instanciadas # as( que son la base de otras clases concretas de donde si podemos instanciar objetos '. public abstract class InputStream e9tends -bject Lectura de "ytes indi)iduales: Se logra mediante cdigo como:
8nputStream is; ...3 int b ; is.read&'3

.s( podemos obtener el siguiente byte del 8nputStream. 2ay que darse cuenta que el byte &O bits' se devuelve como un dato de tipo int &IM bits'# con un valor entre 1 y MKK. "n caso de que se ,aya alcanzado el final del arc,ivo# el mtodo read() devuelve un valor de T0. Lectura de )arios "ytes. Hrimero se crea un arreglo unidimensional del tamaUo adecuado. "l tamaUo de este arreglo es lo que indica al mtodo read() cuntos bytes debe leer como m9imo. "l siguiente ejemplo de fragmento de cdigo lee 01MJ bytes de un flujo de entrada.
byte56 ; mi.rreglo ; ne7 byte501MJ63 $$ declaramos el arreglo. 8nputStream is ; ...3

$r fes r, Carl s A' Rui- De La Cru- Mel

int lee ; is.read&mi.rreglo'3

La variable lee almacena el nCmero de bytes que se ,an le(do en realidad. Si se llega al final del arc,ivo# devuelve el valor de T0. !o ,ay garant(a de leer e9actamente el nCmero de bytes especificado# porque puede ser menor debido a que estamos leyendo de un arc,ivo que se ,a acabado# porque los datos de una cone9in de red tardan en llegar# o cualquier otra causa. Fe cualquier forma# cuando el mtodo read() devuelva un valor distinto de T0 podemos seguir leyendo mediante sucesivas llamadas a read(). Eeamos el siguiente ejemplo que muestra el uso del mtodo read&' para leer bloques de bytes.
$%% % "jemplo: programa de flujos &streams' % que lee el flujos de bytes. Las cadenas a leer se % almacenan en los arreglos de bytes buffer0 y bufferM. % .mbos tiene un tamaUo espec(fico de M1 bytes y % son le(dos con el mtodo read&'. Luego instanciamos % dos objetos de la clase String con dic,os buffers. % Ainalmente los enviamos por System.out.println&' a % la pantalla o consola de salida# y usamos el mtodo % trim&' para eliminar los espacios blancos o vac(os. % +aut,or -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: "scribe!ombres.java %$ public class "scribe!ombres 4 public static void main&String56 args' 4 final int L-! ; M1 3 byte56 buffer0 ; ne7 byte5L-!63 System.out.print&<8ntroduce tu apellido: <'3 try 4 System.in.read&buffer0# 1# L-!' 3 @ catc, &"9ception e' 4@ String apellido ; ne7 String&buffer0' 3 byte56 bufferM ; ne7 byte5L-!63 System.out.print&<8ntroduce tu nombre: <'3 try 4 System.in.read&bufferM# 1# L-!' 3 @ catc, &"9ception e' 4@ String nombre ; ne7 String&bufferM' 3 System.out.println&<2ola # < > nombre.trim&' > < < > apellido.trim&''3 @ @ $$ fin de la clase "scribe!ombres La salida del programa al ejecutarlo con el comando ja)a %scri"e,om"res es: 8ntroduce tu apellido: /-!V.L"V 8ntroduce tu nombre: -S).: 2ola # -S).: /-!V.L"V -errar el flujo de entrada. )uando ya no necesitamos leer datos de un flujo de entrada# se tienen que liberar los recursos reservados mediante el mtodo close(). Si no cerramos el InputStream e9pl(citamente# el flujo asociado se cierra cuando se destruye el objeto. %scritura de "ytes indi)iduales. La clase $utputStream dispone de varios mtodos .rite(). "jemplo: -utputStream os ; ..3

$r fes r, Carl s A' Rui- De La Cru- Mel

int dato ; PPP3 os.7rite&dato'3 )omo en el caso del mtodo read() de la clase InputStream# el mtodo .rite() recibe un byte dentro de una variable de tipo int &IM bits'. %scritura de )arios "ytes. "l cdigo siguiente es muy ilustrativo. byte56 vector ; 4 NK# NN# NP# NO# NL@3 -utputStream os ; ...3 os.7rite&vector'3 $$ escribe los bytes NK# NN#NP#NO#NL os.7rite&vector#0#I'3 $$ escribe los bytes NN#NP#NO

2.1./ 0esti1n de e&cepciones de entrada 2 salida


Bodos los mtodos read()# .rite()# a)ai"le()# etc. lanzan e9cepciones de tipo ja)a.io.I$%&ception. "stas e9cepciones es obligatorio capturarlas# o aparecern errores en tiempo de compilacin. "n general# las partes de los programas que trabajen con los flujos deben estar dentro de una clusula try ... catc3 "jemplo:

try 4 8nputStream is; ..3 7,ile & ... ' 4 $$ Leemos y procesamos datos involucrados con los flujos @ @catc,&8-"9ception ioe' 4 System.err.println&<2ubo un error al abrir el flujo tal y tal ... <'3 ioe.printStacSBrace&'3 @ "n programas pequeUos en los que no se quiera complicarse la e9istencia con estructuras de ste tipo# se puede tomar el camino alternativo de mandar la e9cepcin <,acia arriba<. Hor ejemplo: public static void main&String56 args' t,ro7s 8-"9ception 4 $$ programa creado por un programador flojo @ "l siguiente programa calcula el rea de un tringulo# y ,ace uso del manejo de e9cepciones para los flujos de entrada de tipo ja)a.io.I$%&ception en el mtodo lee4do"le(). Si al compilar el programa le manda un 7arning de que el mtodo readLine&' esta desaprobado & deprecated '# no se preocupe muc,o por eso# el programa correr# es solo una advertencia del compilador de Java que le invita a ud. a utilizar algCn otro mtodo ms actualizado para dic,o fin. $%%

$r fes r, Carl s A' Rui- De La Cru- Mel

% "jemplo: programa de flujos &streams' % que lee el un flujo de datos por el teclado % y lo convierte a un valor de tipo double. % "l programa utiliza manejo de e9cepciones % de tipo java.io.8-"9ception. % +aut,or -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: .reaBriangulo.java %$ import java.io.Fata8nputStream3 class .reaBriangulo4 static double leeWdoble&String msj' 4 Fata8nputStream stream ; ne7 Fata8nputStream&System.in'3 String strng3 double au93 $$ escriba una linea para leer desde el teclado. try 5 System.out.print(msj)6 strn! 7 stream.readLine()6 8 catc3 ( ja)a.io.I$%&ception e ) 5 strn! 7 9:.:96 8 $$ tratando de convertir este valor a un valor de tipo double try 4 au9 ; Fouble.value-f&strng'.doubleEalue&'3 @ catc, & java.lang.!umberAormat"9ception e' 4 au9 ; 1.13 @ return au93 @ public static void main &String args56 ' 4 double a#b#c3 double s#p3 System.out.println&<)alcular .rea de un triangulo<'3 a ; leeWdoble&<Fame lado a: <'3 b ; leeWdoble&<Fame lado b: <'3 c ; leeWdoble&<Fame lado c: <'3 System.out.println&<a; <> a > < b ; < > b > < c; < > c'3 p ; & a > b > c ' $ M.13 System.out.println&<p; < > p'3 s ; Gat,.sqrt& p%&pTa' % &pTb' % &pTc' '3 System.out.println&<.rea ; < > s '3 System.out.println&<fin del programa<'3 @ @ $$ fin de la clase .reaBriangulo

$r fes r, Carl s A' Rui- De La Cru- Mel

La salida del programa al ejecutarlo con el comando ja)a )alcular .rea de un triangulo Fame lado a: I1 Fame lado b: J1 Fame lado c: K1 a; I1.1 b ; J1.1 c; K1.1 p; N1.1 .rea ; N11.1 fin del programa

rea;rian!ulo es:

2.1.< Flujos de acceso a arc3i)os


=a sea (ara leer o (ara escri1ir e$ u$ arc.i,o- estos se ma$i(ula$ co$ )lu+os #e acceso a arc.i,os. E$ 7a,a te$emos la clase FileIn5utStream - co$ los m8to#os $ecesarios (ara a1rir e i$teractuar co$ u$ ca$al #e comu$icaci*$ .acia u$ arc.i,o #e e$tra#a (ara $uestra a(licaci*$- ' la clase FileOut5utStream (ara el caso #e u$ arc.i,o #e sali#a. La clases FileIn5utStream ' FileOut5utStream reci1e$ e$ u$o #e sus co$structores como (ar0metro el $om1re #el arc.i,o a leer o escri1ir. ;a' otras #os ,aria$tes% u$a /ue reci1e u$ o1+eto #e ti(o File ' otra /ue reci1e u$ o1+eto #e ti(o >ileDescri(tor. E$ la secci*$ siguie$te ,eremos la (rimera ,aria$te ' como se utiliza la clase File (ara #ic.o )i$.

2.1.= La clase File


E$ el caso #e la clase File esta se utiliza (ara e$ca(sular la i$teracci*$ #e $uestros (rogramas co$ el sistema #e arc.i,os. Me#ia$te la clase File $o $os limitamos a leer el co$te$i#o #el arc.i,o- como ocurra co$ la clase FileIn5utStream- si$o /ue (o#emos o1te$er i$)ormaci*$ a#icio$al- como el tama?o #el arc.i,o- su ti(o- su )ec.a #e creaci*$- los (ermisos #e acceso /ue te$emos co$ 8l- etc. A#em0s- la clase File es la 6$ica )orma /ue te$emos #e tra1a+ar co$ #irectorios 3crearlos,er los arc.i,os /ue co$tie$e$- cam1iar el $om1re o 1orrar los arc.i,os- etc.4. La )orma m0s se$cilla #e crear u$ o1+eto File es% >ile elArc.i,o @ $eA >ile3Bc%CCcurso+a,aCCelarc.i,o.t2tB4D Es mu' im(orta$te #arse cue$ta #e la #i)ere$cia e$tre u$ o1+eto #e ti(o File ' el arc.i,o o #irectorio al /ue se re)iere. Por e+em(lo- el arc.i,o c%Ccurso+a,aCelarc.i,o.t2t /ue a(arece e$ el )ragme$to #e c*#igo a$terior $o tie$e (or/ue e2istir. Para sa1er si u$ o1+eto File se re)iere a u$ arc.i,o e2iste$te (o#emos usar el m8to#o e6ists78- e+em(lo% Aile el.rc,ivo ; ne7 Aile&<c:XXcursojavaXXelarc,ivo.t9t<'3 if &el.rc,ivo.e9ists&'' 4 $$ "l arc,ivo e9iste @ else 4 $$ "l arc,ivo no e9iste @

$r fes r, Carl s A' Rui- De La Cru- Mel

Se (ue#e o1te$er m0s i$)ormaci*$ #e u$ o1+eto #e la clase File- como - el tama?o #el arc.i,o- si se (ue#e leer el arc.i,o- si se (ue#e escri1ir e$ el arc.i,o- si se .a 1orra#o co$ 82ito el arc.i,o- si se (ue#e 1orrar- el $om1re #e la car(eta #o$#e se e$cue$tra el arc.i,oetc. Eeamos los siguie$tes )ragme$tos #e c*#igo % Aile f ; ne7 Aile&<c:XXcursojavaXXelarc,ivo.t9t<'3 long ; f.lengt,&'3 $$ tamaUo del arc,ivo boolean lectura ; f.can:ead&'3 $$ DHodemos leer el arc,ivo = boolean escritura ; f.canYrite&'3 $$ DHodemos escribir el arc,ivo = if & f.delete&'' 4 $$ arc,ivo borrado con 9ito @ else 4 $$ el arc,ivo no se ,a podido borrrar @ String nombre ; f.get!ame&'3 $$ !ombre &sin carpeta' del arc,ivo String dir ; f.getHarent&'3 $$ Firectorio o carpeta del arc,ivo if & f.isFirectory&' ' 4 $$ "s un directorio @ else 4 $$ !o es un directorio @ if & f.isAile&' ' 4 $$ es un arc,ivo normal @ else 4 $$ no es un arc,ivo normal @ long modificado ; f.lastGodified&'3 $$ Aec,a Cltima de modificacin o actualizacin if & f.renameBo& ne7 Aile&<c:XXcursojavaXXotro.rc,ivo.t9t<''' 4 $$ !ombre de arc,ivo modificado @ else 4 $$ nombre de arc,ivo no modificado @ La clase File- tam1i8$ $os (ermite ma$e+ar car(etas. Los siguie$tes )ragme$tos #e c*#igo /ue se muestra$ a co$ti$uaci*$ e+em(li)ica$ como se (ue#e tra1a+ar co$ car(etas o #irectorios me#ia$te la clase File. Aile f ; ne7 Aile &<c:XXcursojava<'3 String56 lista ; f.list&'3 $$ obtenemos la lista de arc,ivos for & int i;13 i Z lista.lengt,3 i>>' $$ los imprimimos System.out.println&<.rc,ivo n[ < > i > <:< > lista5i6'3

$r fes r, Carl s A' Rui- De La Cru- Mel

&:

Aile t ; ne7 Aile&<c:XXcursojavaXXejemplos< '3 if & t.mSdir&' ' 4 $$ Se ,a creado un directorio ejemplos sobre c:Xcursojava previamente e9istente @ else 4 $$ no se pudo crear el directorio @ Aile 7 ; ne7 Aile&<c:XXcursojavaXXalumnitosXXaplicadosXXestudiososXXdeJava<'3

if & 7.mSdirs&' ' 4 $% Se ,a creado el directorio deJava junto con los directorios intermedios necesarios. %$ @ else 4 $% !o se pudo crear el directorio %$ @

2.1.=.1 %jemplos de la clase File


"n este primer ejemplo de la clase File muestra el uso de algunos de sus mtodos para manejo de arc,ivos: $%% % Hrograma de java que ejemplifica el uso % de la clase Aile# demostrando el acceso a % arc,ivos y carpetas % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: Alujo.rc,ivosM.java %$ import java.io.%3 import java.util.Fate3 public class Alujo.rc,ivosM 4 static String ruta ; <):XXjMsdS0J0XXejemplosXX<3 static String56 arc,ivos ; 4 ne7 String&<.eropuerto.java<'# ne7 String&<8ncrementoFecremento.java<' @3 static String arc,i ; arc,ivos5063 static void pr,r&c,ar c# int lim' 4 for&int i;13 iZlim 3 i>>' System.out.print&c'3 public static void main&String56 argumentos' 4 int parcial#total;1#tamaUo;13 c,ar car3 boolean lectura# escritura3 String nombre# directorio3 long modificado3 try 4 @

Aile f ; ne7 Aile&ruta>arc,i'3

$r fes r, Carl s A' Rui- De La Cru- Mel

&&

pr,r&\T\#O1'3pr,r&\Xn\#0'3 if &f.e9ists&' ' 4 $$ mas datos sobre el arc,ivo System.out.println&<Xt.rc,ivo : <>arc,i> < encontrado con 9ito en: <> ruta'3 System.out.println&<XtBamaUo del arc,ivo&compararlo al final': < > f.lengt,&' > < *ytes<'3 lectura ; f.can:ead&'3 $$ Dse puede leer el arc,ivo = escritura ; f.canYrite&'3 $$ Dse puede escribir el arc,ivo= nombre ; f.get!ame&'3 $% !ombre &sin directorio' del arc,ivo %$ directorio ; f.getHarent&'3 $% Firectorio del arc,ivo %$ modificado ; f.lastGodified&'3 $% Aec,a de Cltima modificacin %$ Fate d ; ne7 Fate&modificado'3 if &lectura ]] escritura ' System.out.println&<Xt"s una arc,ivo de lectura y escrituraXn<'3 else if& lectura ]] ?escritura' System.out.println&<Xt"s un arc,ivo de solo lecturaXn<'3 else if& ?lectura ]] ?escritura' System.out.println&<Xt"s un arc,ivo que no se puede leer ni escribirXn<'3 else if& escritura ' System.out.println&<Xt"s un arc,ivo de escrituraXn<'3 System.out.println&<!ombre del arc,ivo: < > nombre'3 System.out.println&<!ombre del directorio o carpeta del arc,ivo : < > directorio'3 System.out.println&<Aec,a de Cltima modificacin : <> d'3 @ else System.out.println&< "l arc,ivo: < > arc,i > < no e9iste en : < > ruta'3 pr,r&\T\#O1'3pr,r&\Xn\#0'3 Aile8nputStream fis ; ne7 Aile8nputStream&f'3 7,ile&& parcial;fis.read&''?;T0' 4 total>; parcial3 tamaUo>>3 car ; &c,ar'parcial3 System.out.print&car'3 @ System.out.print&<Xn<'3 fis.close&'3 @ catc, &Aile!otAound"9ception fnfe' 4 $% .rc,ivo no encontrado %$ System.err.println&<.rc,ivo no encontrado# "rror: < > fnfe.getGessage&''3 @ catc, &8-"9ception ioe' 4

$r fes r, Carl s A' Rui- De La Cru- Mel

&*

$% "rror al leer %$ System.err.println&<"rror al leer el arc,ivo# "rror: < > ioe.getGessage&''3 @ finally 4

pr,r&\T\#N1'3pr,r&\Xn\#0'3 System.out.println&<Xt"l tamaUo del arc,ivo: &<>arc,i><:<>tamaUo>< *ytes'<'3

@ System.out.println&<Ain del programa<'3 @ $$fin del main&' @ $$fin de la clase Alujo.rc,ivosM La salida del programa al ejecutarlo con el comando ja)a Flujo rc3i)os2 y que muestra el arc,ivo 8ncrementoFecremento.java que se encuentra en la carpeta ):XjMsdS0J0XejemplosX es:
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT .rc,ivo : 8ncrementoFecremento.java encontrado con 9ito en: ):XjMsdS0J0XejemplosX BamaUo del arc,ivo&compararlo al final': N1J *ytes "s una arc,ivo de lectura y escritura !ombre del arc,ivo: 8ncrementoFecremento.java !ombre del directorio o carpeta del arc,ivo : ):XjMsdS0J0Xejemplos Aec,a de Cltima modificacin : Ari .ug 01 M1:0P:MJ /GBT1N:11 M110 TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT import java.io.%3 public class 8ncrementoFecremento 4 public static void main&String56 args' 4 c,ar c ; \:\3 byte j ; 0MP3 s,ort S ; IMPNP3 System.out.println&<c ; < > c'3 >>c3 System.out.println&<c ; < > c'3 >>c3 System.out.println&<c ; < > c'3 System.out.println&<j ; < > j'3 TTj3 System.out.println&<j ; < > j'3 >>j3 System.out.println&<j ; < > j'3 >>j3 System.out.println&<j ; < > j'3 System.out.println&<S ; < > S'3 S T; J3 System.out.println&<S ; < > S'3 S >; K3 System.out.println&<S ; < > S'3 @ @$$=^
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT "l tamaUo del arc,ivo:&8ncrementoFecremento.java:N1J *ytes' Ain del programa

"l segundo ejemplo de la clase File muestra el uso de algunos de sus mtodos para manejo de carpetas o directorios: $%%

$r fes r, Carl s A' Rui- De La Cru- Mel

&/

% Hrograma de java que ejemplifica el uso % de la clase Aile para demostrar % el manejo de carpetas o directorios % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: Alujo.rc,ivosI.java %$ import java.io.%3 import java.util.Fate3 public class Alujo.rc,ivosI 4 static String ruta ; <):XXjMsdS0J0XXejemplosXX"TSXX<3 static String56 lista3 static void pr,r&c,ar c# int lim' 4 for&int i;13 iZlim 3 i>>' System.out.print&c'3 @ static void prln&String msg' 4 System.out.println&msg'3 @ static void pr&String msg' 4 System.out.print&msg'3 @ public static void main&String56 argumentos' 4 try 4 Aile f ; ne7 Aile&ruta'3 pr,r&\T\#O1'3pr,r&\Xn\#0'3 if &f.e9ists&' ' 4 lista ; f.list&'3 $% -btenemos la lista de arc,ivos %$ for &int i;13 iZlista.lengt,3 i>>' $% los imprimimos %$ prln&<.rc,ivo nXu11*1 <>&i>0'><: < > lista5i6'3 @ else System.out.println&< "l directorio: < > ruta > < no e9iste <'3 @ catc, &"9ception e' 4 $% directorio no encontrado %$ System.err.println&<Firectorio no encontrado# "rror: < > e.getGessage&''3 @ finally 4 pr,r&\T\#N1'3pr,r&\Xn\#0'3 @ System.out.println&<Ain del programa<'3 @ $$ fin del main @ $$fin de la clase Alujo.rc,ivosI La salida del programa que muestra el contenido de arc,ivos de la carpeta de mi computadora ):XXjMsdS0J0XXejemplosXX"TSXX # al ejecutarlo con el comando ja)a Flujo rc3i)os' es:
TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT .rc,ivo n[ 0: .lumnitos.t9t .rc,ivo n[ M: .lumno.class .rc,ivo n[ I: alumnos9sqlserverM111.sql .rc,ivo n[ J: .rc,i"nt.t9t .rc,ivo n[ K: .rc,ivo"nt.class .rc,ivo n[ N: .rc,ivoSal.class .rc,ivo n[ P: .rc,ivoSal.t9t

$r fes r, Carl s A' Rui- De La Cru- Mel

&0

.rc,ivo n[ O: classes .rc,ivo n[ L: )opy.class .rc,ivo n[ 01: )opy.java .rc,ivo n[ 00: "T.S.java.doc .rc,ivo n[ 0M: "TSenJava.doc .rc,ivo n[ 0I: entrada.t9t .rc,ivo n[ 0J: "!BS.L.baS .rc,ivo n[ 0K: "!BS.L.jde .rc,ivo n[ 0N: "scribe.class .rc,ivo n[ 0P: "scribe!ombres.class .rc,ivo n[ 0O: "scribe!ombres.java .rc,ivo n[ 0L: "sencialJF*).class .rc,ivo n[ M1: "sencialJF*).java .rc,ivo n[ M0: "studiantes.t9t .rc,ivo n[ MM: "valuador.class .rc,ivo n[ MI: "valuador.java .rc,ivo n[ MJ: "valuador.rc,i.class .rc,ivo n[ MK: "valuador.rc,i.java .rc,ivo n[ MN: "valuador.rc,ivosM.class .rc,ivo n[ MP: "valuador.rc,ivosM.java .rc,ivo n[ MO: "valuador*FM.class .rc,ivo n[ ML: "valuador*FM.java .rc,ivo n[ I1: "valuador*FI.class .rc,ivo n[ I0: "valuador*FI.java .rc,ivo n[ IM: Alujo0.java .rc,ivo n[ II: Alujo.rc,ivos0.java .rc,ivo n[ IJ: Alujo.rc,ivosM.class .rc,ivo n[ IK: Alujo.rc,ivosM.java .rc,ivo n[ IN: Alujo.rc,ivosI.class .rc,ivo n[ IP: Alujo.rc,ivosI.java .rc,ivo n[ IO: GiMdo.ccesoJF*).class .rc,ivo n[ IL: Gi.ccesoJF*).class .rc,ivo n[ J1: GSTF-S.L!_ .rc,ivo n[ J0: Hersona.class .rc,ivo n[ JM: Hrint!ames.class .rc,ivo n[ JI: Hrint!ames.java .rc,ivo n[ JJ: salida.t9t .rc,ivo n[ JK: src .rc,ivo n[ JN: Sumatorias.class .rc,ivo n[ JP: Sumatorias.java .rc,ivo n[ JO: S(mbolo del sistema.lnS .rc,ivo n[ JL: tabla.L G!-S`sqlserverM111.sql TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ain del programa

2.1.> La clase File$utputStream


"l pr9imo paso es el esperado: abrir un arc,ivo y escribir en l. 2ay varias formas de realizar esto# todas# prcticamente simtricas a las utilizadas para leer arc,ivos. "jemplo: $% )reamos un stream de salida sobre el arc,ivo %$ Aile-utputStream fos3 fos ; ne7 Aile-utputStream&<c:XXcursojavaXXsalida.t9t<'3 $% "scribiremos los nCmeros del 0 al 01 en el arc,ivo %$ for & int S;13 SZ;013 S>>' 4 fos.7rite&S'3 @ fos.close&'3 -tro ejemplo puede ser el comando copy de GSTF-S: $%%

$r fes r, Carl s A' Rui- De La Cru- Mel

&1

% "jemplo: programa de flujos &streams' % que ejemplifica el uso de las clases % Aile8nputStream y Aile-utputStream para % programar el comando copy de GSTF-S % "l programa utiliza manejo de e9cepciones % de tipo java.io.8-"9ception. % +aut,or -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: )opy.java %$ import java.io.%3 class )opy 4 public static void main&String56 args' 4 String origen ; args5163 String destino ; args5063 byte buffer56 ; ne7 byte501MJ63 int cuenta3 try 4 Aile8nputStream fis ; ne7 Aile8nputStream&origen'3 Aile-utputStream fos ; ne7 Aile-utputStream&destino'3 7,ile&&cuenta;fis.read&buffer''^1' fos.7rite&buffer#1#cuenta'3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un error<'3 ioe.printStacSBrace&'3 @ @ $$ fin del mtodo main&' @ $$ fin de la clase )opy Si ejecutamos el programa )opy con el comando : java )opy c:XtemporalXarc,ivo0.t9t <c:XGis FocumentosXarc,ivoM.t9t< "l programa copiar el contenido de un arc,ivo en el otro# en bloques de 01MJ bytes con el mtodo read() leyendo del arc,ivo origen # al arc,ivo destino con el mtodo .rite(). La ruta y arc,ivo de origen y destino son los argumentos del mtodo main() . Hor supuesto se deja al lector de este material# agregar el cdigo de cerrar los flujos de entrada fis y salida fos con el mtodo close() . )abe seUalar que si el arc,ivo destino ya e9iste# ser borrado. Si el arc,ivo origen no e9iste# el catc3 del programa nos notificar y volacar en pantalla el contenido de la pila de llamadas.

2.1.? La clase @ata$utputStream


Los programas que se ,an visto ,asta a,ora solo escriben bytes en un flujo de datos. . pesar de que con estas tcnicas podr(amos leer y escribir cualquier cosa en un arc,ivo# esta forma de trabajar es relativamente pesada# ya que cada vez que quisiramos escribir# por ejemplo# un entero de IM bits en un arc,ivo# tendr(amos que dividir los IM bits en cuatro paquetes de O bits cada uno# e ir transmitindolos a travs de flujo de datos. Hara leer ese dato# el proceso ser(a el inverso3 leer cuatro bytes del flujo y combinarlos para obtener el nCmero de IM bits.

$r fes r, Carl s A' Rui- De La Cru- Mel

&2

)omo veremos# el paquete ja)a.io nos proporciona varias ,erramientas para facilitarnos este trabajo. La clase Fata-utputStream La clase @ata$utputStream# es una e9tensin de la clase $utputStream# y aUade a sta Cltima la posibilidad de escribir datos <complejos< en un flujo de salida. )uando ,ablamos de datos <complejos<# en realidad nos referimos a tipo de datos primitivos# pero no restringidos Cnicamente a bytes y a matrices de bytes# como en el caso de $utputStream. Gediante la clase @ata$utputStream podemos escribir datos de tipo int# float# dou"le# c3ar# etc. .dems podemos escribir algunos objetos# como datos de tipo Strin!# en una gran cantidad de formatos. La forma general de trabajar con objetos de tipo @ata$utputStream es la siguiente: obtenemos un objeto $utputStream &cuyo origen puede ser cualquiera# un arc,ivo# un socSet# una matriz en memoria# la salida estndar# etc.' y lo <envolvemos< en un objeto @ata$utputStream# de forma que podamos usar la interfaz que nos proporciona este Cltimo. Hara crear este @ata$utputStream# le pasamos como parmetros el $utputStream a su constructor. )ada vez escribamos un dato <complejo< en un objeto @ata$utputStream. "ste lo traducir a bytes individuales# y los escribir en el $utputStream subyacente# sin que nosotros tengamos que preocuparnos de la forma en que lo ,ace. Eeamos algunos ejemplos: -utputStream os ; ... 3 int a ; TP3 float b; I.JMKKM3 double c ; PJP.OOIL3 dos.7rite8nt&a'3 $$ "scribimos un entero en el stream &J bytes' dos.7riteAloat& b '3 $$ "scribimos un nCmero de precisin simple &J bytes' dos.7riteFouble& c '3 $$ "scribimos un nCmero de precisin doble &O bytes' dos.close&'3 os.close&'3 Los nombres de los mtodos usados son bastante descriptivos por s( mismo. "n la documentacin del SF_ de Java podemos encontrar otros mtodos# uno para cada tipo de dato primitivo: .riteBoolean()# .riteByte()# .rite-3ar()# .riteLon!() y .riteS3ort(). Si seguimos e9plorando el SF_# descubriremos algunos mtodos de los que aCn no ,emos ,ablado3 .riteBytes()3 .rite-3ars() y .riteA;F(). "stos tres mtodos reciben como parmetros un objeto de tipo Strin!# y lo escriben en el $utputStream subyacente usando diferentes formatos. .riteBytes() descompone la cadena de te9to en bytes individuales &obtiene su cdigo .S)88' y los escribe en el flujo de salida. Si la cadena $$ )reamos el flujo de salida

Fata-utputStream dos ; ne7 Fata-utputStream&os'3

$r fes r, Carl s A' Rui- De La Cru- Mel

&3

consta de n letras# escribe n bytes# sin aUadir ningCn delimitador ni de principio ni de fin de cadena. .rite-3ars() descompone la cadena de te9to en c,ars individuales &obtiene su cdigo nicode' y los escribe en el flujo de salida. Si la cadena consta de n letras# escribe n valores c,ar# sin aUadir ningCn delimitador ni de principio ni de fin de cadena. .riteA;F() escribe la cadena en un formato conocido como BATO. "ste formato incluye informacin sobre la longitud e9acta de la cadena.

La conclusin importante que debemos e9traer de estos tres Cltimos mtodos es que slo el Cltimo nos permite recuperar la cadena con facilidad. Los otros dos mtodos no incluyen informacin sobre la longitud de la cadena# por lo que si otro programa necesita leer los datos que nosotros ,emos escrito# es necesario conocer con anticipacin la longitud de la cadena. Si no sabemos esto# es imposible saber el nCmero de bytes o de valores c,ar que debemos leer. n fragmento de cdigo ejemplo de utilizacin de estos mtodos es: Strng cadena0 ; <Ge voy a descomponer en una cadena de te9to de bytes individuales<3 String cadenaM ; <Ge voy a descomponer en una cadena de te9to de c,ars individuales<3 String cadenaI ; <Ge voy a descomponer en una cadena de te9to en formato BATO <3 dos.7rite*ytes&cadena0'3 dos.7rite),ars&cadenaM': dos.7rite BA&cadenaI'3

2.1.1: La clase @ataInputStream


Si podemos escribir datos formateados entonces tambin podemos leerlos cmodamente. "sta funcin es posible porque disponemos de la clase @ataInputStream. La clase @ataInputStream est diseUada para leer datos generados por un objeto @ata$utputStream. La especificacin de esta clase garantiza que cualquier arc,ivo escrito por un @ata$utputStream# sobre cualquier plataforma y sistema operativo# ser legible correctamente por un @ataInputStream# sin tener necesidad de preocuparse de que si las mquinas son <littleTendian< o <bigTendian<. Supongamos que estamos intentando leer los datos escritos por el programa de ejemplo anterior &donde escrib(amos un int# un float y un dou"le en un flujo de salida': 8nputStream is ; ... 3 $$ creamos un flujo de entrada Fata8nputStream dis ; ne7 Fata8nputStream& is '3 int 93 float y3 double z3 9 ; dis.read8nt&'3 y ; dis.readAloat&'3 z ; dis.readFouble&'3

$r fes r, Carl s A' Rui- De La Cru- Mel

&4

dis.close&'3 is.close&'3 Dau pasa si deseamos leer las cadenas de te9to que ,emos escrito=. "s inmediato leer la cadena escrita en formato BA. "n cambio# leer las otras dos cadenas nos va a costar ms trabajo# ya que debemos leer los bytes o los c,ars individuales# juntarlos de forma adecuada y construir la cadena resultante. "n este caso usaremos un truco # ya que sabemos que las cadenas cadena0 y cadenaM tienen una longitud de NK letras e9actamente. "n una situacin normal# puede que no tengamos esta informacin. int tam ; NK3 $$ .plicamos el truco 8nputStream is ;...3 $$creamos el flujo de entrada Fata8nputStream dis ; ne7 Fata8nputStream& is '3 byte mi!uevo.rray56 ; ne7 byte 5 tam 63 dis.readAully&mi!ueva.rray'3 $% "ste mtodo es nuevo %$ String cadena)onvertida ; ne7 String&mi!ueva.rray#1;3 $$ .,ora tenemos que leer un montn de caracteres c,ar de &0N bits' $$ que forman el siguiente String escrito. $$ 2ay que ,acer un bucle para ir leyendo los caracteres uno por uno c,ar otro.rrayGas56 ; ne7 c,ar5tam6: for& int n ; 1 3 n Z tam 3 n>> ' otro.rrayGas5 s 6 ; dis.read),ar&'3 String otra)adenaconvertida ; ne7 String& otro.rrayGas '3 $$ Solo resta leer el String en formato $$ BATO nicamente con llamar a read BA&'# ya que la longitud

$$ del String est indicada en el propio arc,ivo. String ultima)adena ; dis.read BA&'3 "n el ejemplo anterior ,emos usado un mtodo nuevo. @ataInputStream.readFully( "yteBC ) # que es bsicamente equivalente a InputStream.read("yteBC) # con la Cnica diferencia de que no retorna ,asta que ,ayan sido le(dos e9actamente el nCmero de bytes que caben en la matriz. "s fcil apreciar las ventajas de usar los mtodos .riteA;F() y readA;F().

%ntrada y Salida en memoria


"9isten ocasiones en que nos puede interesar acceder a cierta informacin en memoria como si estuviramos leyendo desde un flujo de datos. Hor ejemplo# podemos tener un objeto capaz de leer un arc,ivo GH"/ &video comprimido' y mostrarlo posteriormente en pantalla. Supongamos que ese objeto est diseUado para leer los datos desde un InputStream# pero queremos que lea los datos desde una array de bytes que tenemos en memoria# cuyo contenido ,emos generado de alguna forma. na forma de resolver el problema ser(a escribir el array de bytes en un arc,ivo# y ,acer que nuestro objeto reproductor de GH"/ leyera el contenido. -tra forma# ms elegante y ms eficiente que la anterior# ser(a crear un flujo que e9trajera sus datos directamente desde nuestro array en memoria. )ualquier objeto que leyera datos de este flujo# en realidad estar(a obteniendo los datos secuencialmente del array. La clase que nos permite ,acer este es @ata rrayInputstream. "sta clase tiene un constructor al que se le pasa como parmetro la matriz de bytes de la que debe leer# por ejemplo: int tam ; J13 byte56 buffer ; ne7 byte5 tam 63 for& int n ; 1 3 n Z tam 3 n>> '

$r fes r, Carl s A' Rui- De La Cru- Mel

&9

buffer5n6 ; n3 *yte.rray8nputStream bais ; ne7 *yte.rray8nputStream& buffer '3 b int c: 7,ile& & c ; bais.read&' ' ?; T0 ' buffer%$ ... La clase Byte rrayDutputStream es otra del mismo tipo muy Ctil# ya que por medio de esta podemos escribir datos en un flujo# sabiendo que estos datos se almacenan internamente en una matriz de bytes. "sta matriz crece dinmicamente a medida que escribimos datos en ella. na vez escritos los datos# podemos acceder a la matriz de bytes mediante el mtodo toByte rray()# que nos devuelve una copia de la matriz original. Eeamos el siguiente fragmento de cdigo de ejemplo: *yte.rray-utputStream baos ; ne7 *yte.rray-utputStream&': boolean condicion ; false3 7,ile& condicion ' 4 int dato ; b3 baos 7rite&dato'3 condicion ; b3 @ byte56 bufferSalida ; baos.to*yte.rray&'3 na vez ejecutado el cdigo anterior obtenemos una matriz de bytes con todos los datos que se ,an ido introduciendo en la iteracin del bucle. $%Gientras leamos algo de

System.out.println& < Se ,a le(do el valor: < > c '3

2.1.11 %jemplo de @ataInputStream y @ata$utputStream


Eamos a resolver el siguiente programa utilizando las clases @ataInputStream y @ata$utputStream. n profesor de computacin lleva las calificaciones de sus alumnos en una libreta y desea calcular las calificaciones de estos. "l promedio total para cada alumno ser : K1c para la calificacin de Yindo7s# MKc para la de Yord y MKc para la de "9cel. Si el alumno saca 01 la calificacin ser dSobresalientee# si obtiene entre L a L.LLL su calificacin ser dGuy *iene# si obtiene entre O a O.LLLL su calificacin ser d*uenoe# si obtiene de P a P.LLL su calificacin ser dFe pansazoe y si obtiene entre 1 a N.LLL su calificacin ser d*urro no aprobadoe. "l rea que esta en gris debe ser calculada con frmulas. Los datos deben leerse de un arc,ivo de entrada: dentrada.t9te y los resultados en un arc,ivo de salida: dsalida.t9te.
Id pellidos 0 Favolio M Auller I Leverling ,om"re !ancy .ndre7 Janet -ar!o :epresentante de ventas Eicepresidente comercial :epresentante de ventas ;ratam iento Srta. Fr. Srta. Eindo.s O.11 O.11 O.11 Eord O.0L L.11 O.11 %&cel L.1J N.11 O.11 Dromedi -alificaci o 1n

$r fes r, Carl s A' Rui- De La Cru- Mel

*:

J HeacocS K *uc,anan N Suyama P _ing O )alla,an L Fods7ort,

Gargaret Steven Gic,ael :obert Laura .nne

:epresentante de ventas /erente de ventas :epresentante de ventas :epresentante de ventas )oordinador ventas interno :epresentante de ventas

Sra. Sr. Sr. Sr. Srta. Srta.

O.IM 01.11 O.11 O.L0 O.11 O.11

O.11 O.11 K.11 O.11 0.0J P.K1

O.11 01.11 O.11 L.11 K.KP O.11

Informaci1n !eneral de rendimiento del !rupo de estudiantes. F&ima -alificaci1n Lumno Dromedio FGnima -alificaci1n lumn o Dromedio #arianHa de los promedio s

Solucin: La clase %)aluador rc3i)os tiene el mtodo main() que arranca todo el proceso# y en l estn los nombres de los arc,ivos entrada.txt y salida.txt para el manejo de los datos. Bambin se leen todos los datos del arc,ivo entrada.txt para asignrselos al arreglo p de la clase lumnos en el bucle .3ile de la l(nea 00N a la 00L. Fespus se invocan a algunos mtodos estticos de clase para el clculo de los datos estad(sticos. .s(# el mtodo esttico de clase Dromedios0enerales( lumno HBC) devuelve el promedio de cada alumno y recibe el arreglo de la clase lumno. "l mtodo ma&Imin-alif( lumno .BC) ,ace el trabajo de obtener que alumnos obtuvieron la m9ima y m(nima calificacin y los imprime# y finalmente el mtodo )arianHaDromedios( lumno )BC*dou"le media) calcula la varianza# en base a la media que se le envia como argumento.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. $%% % Hrograma de java que ejemplifica el uso % de las clases Fata8nputStream y Fata-utputStream % para enseUarte a usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: "valuador.rc,ivosM.java %$ public class "valuador.rc,ivosM 4 static void imprime& .lumno 956 ' 4 final int band;03 if& band ;;0' System.out.println&<8dXt!ombreXt.pellidosXt)argoXtBratoXtYindo7sXtYordXt"9celXtHromedioXt)alificacion<'3 for &int i;13 iZ 9.lengt,3 i>>' 4 System.out.println&<<>95i6.id > <Xt< > 95i6.nombre > <Xt< > 95i6.apellidos > <Xt< > 95i6.cargo > <Xt< > 95i6.get"9amen&0' > <Xt< > 95i6.get"9amen&M' > <Xt< > 95i6.get"9amen&I' > <Xt< > 95i6.getHromedio&' > <Xt< > 95i6.get)alificacion&' > <Xt< '3 "scribe.pon:aya&011#<T<'3 @ @

$r fes r, Carl s A' Rui- De La Cru- Mel

*&

32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105.

static double Hromedios/enerales&.lumno z56' 4 double sumaYindo7s;1.1# sumaYord;1.1# suma"9cel; 1.1# suma/rupo; 1.13 double promYindo7s;1.1# promYord;1.1# prom"9cel; 1.1# prom/rupo; 1.13 System.out.println&'3 "scribe.pon:aya&011#<;<'3 System.out.println&<8nformacin general del rendimiento del grupo de estudiantes<'3 "scribe.pon:aya&011#<;<'3 for &int i;13 iZ z.lengt,3 i>>' 4 sumaYindo7s ; sumaYindo7s > z5i6.get"9amen&0'3 sumaYord ; sumaYord > z5i6.get"9amen&M'3 suma"9cel ; suma"9cel > z5i6.get"9amen&I'3 suma/rupo ; suma/rupo > z5i6.getHromedio&'3 @ promYindo7s ; sumaYindo7s $ z.lengt,3 promYord ; sumaYord $ z.lengt,3 prom"9cel ; suma"9cel $ z.lengt,3 prom/rupo ; suma/rupo $ z.lengt,3 System.out.println&<XtHromedio de Yindo7s:<> promYindo7s > <Xn< > <XtHromedio de Yord: < > promYord > <Xn< > <XtHromedio de "9cel: < > prom"9cel > <Xn< > <XtHromedio del /rupo: < > prom/rupo'3 System.out.println&<<'3 return prom/rupo3 @ public static void ma9fmin)alif&.lumno 756' 4 double ma9ima;1.1# minima;1.13 int burro; 1# estrellita; 13 System.out.println&'3 ma9ima ; 7516.getHromedio&'3 minima ; 7516.getHromedio&'3 for&int i;03 iZ 7.lengt,3 i>>'4 if & ma9ima Z 75i6.getHromedio&' ' 4ma9ima ; 75i6.getHromedio&'3 estrellita ; i3 @ if & minima ^ 75i6.getHromedio&' ' 4minima ; 75i6.getHromedio&'3 burro ; i3 @ @ "scribe.pon:aya&J1#<T<'3 System.out.println&<XtGa9ima )alificacion:< > <XnXt.lumno:< > 75estrellita6.nombre > < < > 75estrellita6.apellidos > <XnXtHromedio:< > ma9ima'3 System.out.println&'3 System.out.println&<XtGinima )alificacion:< > <XnXt.lumno:< > 75burro6.nombre > < < > 75burro6.apellidos > <XnXtHromedio:< > minima'3 @ public static void varianzaHromedios&.lumno v56#double media' 4 double ds;1.1# varianza ; 1.13 for &int i;13 i Z v.lengt,3 i>>' 4 ds ; ds > Gat,.po7&media T v5i6.getHromedio&'#M'3 @ ds ; ds$ v.lengt,3 varianza ; Gat,.sqrt&ds'3 "scribe.pon:aya&J1#<T<'3 System.out.println&<XtEarianza de los promedios:< > varianza'3 @ public static void main& String args56 ' 4 String56 arc,ivos ; 4 ne7 String&<salida.t9t<'# ne7 String&<entrada.t9t<' @3 String arc,ient ; arc,ivos5063 String arc,isal ; arc,ivos5163 double lamedia ; 1.13

$r fes r, Carl s A' Rui- De La Cru- Mel

**

106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. @

.lumno p56 ; ne7 .lumno5L63 $$ )rea un flujo de entrada .rc,ivo"nt arc,ivoWsecu ; ne7 .rc,ivo"nt&arc,ient'3 $$ Gientras no se encuentre el final del arc,ivo sigue leyendo int i;13 7,ile &iZp.lengt,' 4 p5i6 ; arc,ivoWsecu.leer&'3 i>>3 @ arc,ivoWsecu.cerrar&'3 imprime&p'3 lamedia;Hromedios/enerales&p'3 ma9fmin)alif&p'3 varianzaHromedios&p#lamedia'3 $$parte dedicada a crear los datos y guardarlos en un arc,ivo de salida $$ ,ay que quitarle los comentarios si no e9iste el arc,ivo con formato de entrada $% p516 ; ne7 .lumno&0#<Favolio<#<!ancy<#<:epresentante de Eentas<#<Srta.<#O.11#O.0L#L.1J'3 p506 ; ne7 .lumno&M#<Auller<#<.ndre7<#<Eicepresidente comercial<#<Fr.<#O.11#L.11#N.11'3 p5M6 ; ne7 .lumno&I#<Leverling<#<Janet<#<:epresentante de Eentas<#<Srta.<#O.11#O.11#O.11'3 p5I6 ; ne7 .lumno&J#<HeacocS<#<Gargaret<#<:epresentante de Eentas<#<Sra.<#O.IM#O.11#O.11'3 p5J6 ; ne7 .lumno&K#<*uc,anan<#<Steven<#</erente de Eentas<#<Sr.<#01.1 #O.11 #01.1'3 p5K6 ; ne7 .lumno&N#<Suyama<#<Gic,ael<#<:epresentante de Eentas<#<Sr.<#O.11#K.11#O.11'3 p5N6 ; ne7 .lumno&P#<_ing<#<:obert<#<:epresentante de Eentas<#<Sr.<#O.L0#O.11#L.11'3 p5P6 ; ne7 .lumno&O#<)alla,an<#<Laura<#<)ordinador ventas interno<#<Srta.<#O.11#0.0J#K.KP'3 p5O6 ; ne7 .lumno&L#<Fods7ort,<#<.nne<#<:epresentante de ventas<#<Srta.<#O.11#P.K1#O.11'3 .rc,ivoSal arc,iWsecu ; ne7 .rc,ivoSal&arc,isal'3 for & int i;13 iZp.lengt,3 i>>' 4 arc,iWsecu.insertar&p5i6'3 @ arc,iWsecu.cerrar&'3 %$ @ $$ fin del main&' $$ fin de "valuador.rc,ivosM

.l ejecutar este programa con el comando ja)a %)aluador rc3i)os2 da los siguientes resultados:
8d !ombre .pellidos )argo Brato Yindo7s Yord "9cel Hromedio )alificacion 0 Favolio !ancy :epresentante de Eentas O.1 O.0L P.1J P.O1PJLLLLLLLLLLL Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT M Auller .ndre7 Eicepresidente comercial O.1 L.1 N.1 P.PK Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT I Leverling Janet :epresentante de Eentas O.1 O.1 O.1 O.1 Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT J HeacocS Gargaret :epresentante de Eentas O.IM O.1 O.1 O.0N Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT K *uc,anan Steven /erente de Eentas 01.1 O.1 01.1 L.K Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT N Suyama Gic,ael :epresentante de Eentas O.1 K.1 O.1 P.MK Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT P _ing :obert :epresentante de Eentas O.L0 O.1 L.1 O.P1K Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT O )alla,an Laura )ordinador ventas interno O.1 0.0J K.KP K.NPPK Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT L Fods7ort, .nne :epresentante de ventas O.1 P.K O.1 P.OPK Guy *ien TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

$r fes r, Carl s A' Rui- De La Cru- Mel

*/

8nformacin general del rendimiento del grupo de estudiantes ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hromedio de Yindo7s:O.IKOOOOOOOOOOOL Hromedio de Yord: N.LO0000000000000 Hromedio de "9cel: P.PIJJJJJJJJJJJJK Hromedio del /rupo: P.OKOIIIIIIIIIIIMK TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Ga9ima )alificacion: .lumno:*uc,anan Steven Hromedio:L.K Ginima )alificacion: .lumno:)alla,an Laura Hromedio:K.NPPK TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT Earianza de los promedios:1.LO00IO1ONIMOKJPN

La clase rc3i)o%nt ,ace el trabajo de leer los datos del arc,ivo entrada.txt . La ubicacin de ese arc,ivo es especificada por la variable Strin! ruta en la l(nea 0J y puede ser cambiada. "l constructor rc3i)o%nt(Strin! nom"arc3ent) crea el flujo al arc,ivo de entrada y crea un objeto de la clase @ataInputStream para leer los datos con formato y todo se ,ace en un try J catc3 por si ,ay un error de tipo I$%&ception. "l mtodo leer() de la l(nea IN a la KN ,ace el trabajo de leer un registro del arc,ivo con datos con formato y emplea los mtodos de la clase @ataInputStream # readInt()# readA;F()# y read@ou"le() regresando un objeto de la clase lumno # el mtodo cerrar() de la l(nea KO a la NK cierra el flujo de entrada que abrimos con el mtodo ent.cloose() lo cual es importante para evitar un problema con el administrador de arc,ivos del sistema operativo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. $%% % )lase publica .rc,ivo"nt y que es necesaria para el % programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: .rc,ivo"nt.java %$ import java.io.%3 public class .rc,ivo"nt 4 static String ruta ; <):XXjMsdS0J0XXejemplosXX"TSXX<3 private Aile fic,ero3 private Aile8nputStream f3 private Fata8nputStream ent3 boolean fin3 .rc,ivo"nt&String nombarc,ent' 4 try 4 fin ; false3 fic,ero ; ne7 Aile&ruta>nombarc,ent'3 f ; ne7 Aile8nputStream&fic,ero'3 ent ; ne7 Fata8nputStream& f '3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3 @ $$:etorna si nos encontramos al final del arc,ivo

$r fes r, Carl s A' Rui- De La Cru- Mel

*0

34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66.

public boolean eof&' 4 return fin3 @ public .lumno leer&' 4 .lumno reg; null3 try4 $$lee un registro de .lumno del arc,ivo reg; ne7 .lumno&ent.read8nt&'# ent.read BA&'# ent.read BA&'# ent.read BA&'# ent.read BA&'# ent.readFouble&'# ent.readFouble&'# ent.readFouble&' '3 return reg3 @catc,&"-A"9ception eof' 4 fin;true3@ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3

@ return reg3

public void cerrar&'4 try 4 ent.close&'3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3 @

67.

@ $$ de la clase .rc,ivo"nt

La clase rc3i)oSal ,ace el trabajo de escribir los datos del arc,ivo salida.txt . La ubicacin de ese arc,ivo es especificada por la variable Strin! ruta en la l(nea 0J y puede ser cambiada. "l constructor rc3i)oSal(Strin! nom"arc3sal) crea el flujo al arc,ivo de salida y crea un objeto de la clase @ata$utputStream para escribir los datos con formato y todo se ,ace en un try J catc3 por si ,ay un error de tipo I$%&ception. "l mtodo insertar( lumno re!) de la l(nea II a la JO ,ace el trabajo de escribir un registro de la clase lumno con formato y emplea los mtodos de la clase @ata$utputStream # .riteInt()# .riteA;F()# y .rite@ou"le() # el mtodo cerrar() de la l(nea K0 a la KO cierra el flujo de salida que creamos con el mtodo sal.cloose() # adicionalmente a esto primero liberamos el flujo de salida con el mtodo sal.flus3() lo cual es importante para evitar un problema con el sistema operativo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. $%% % )lase publica .rc,ivoSal y que es necesaria para el % programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: .rc,ivoSal.java %$ import java.io.%3 public class .rc,ivoSal 4 static String ruta ; <):XXjMsdS0J0XXejemplosXX"TSXX<3 private Aile fic,ero3 private Aile-utputStream f3 private Fata-utputStream sal3

$r fes r, Carl s A' Rui- De La Cru- Mel

*1

18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59.

.rc,ivoSal&String nombarc,sal' 4 try 4 fic,ero ; ne7 Aile&ruta>nombarc,sal'3 f ; ne7 Aile-utputStream&fic,ero'3 sal ; ne7 Fata-utputStream& f '3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3 @ @ public void insertar&.lumno reg ' 4 try 4 sal.7rite8nt&reg.get8d&''3 sal.7rite BA&reg.get!ombre&''3 sal.7rite BA&reg.get.pellidos&''3 sal.7rite BA&reg.get)argo&''3 sal.7rite BA&reg.getBratamiento&''3 sal.7riteFouble&reg.get"9amen&0''3 sal.7riteFouble&reg.get"9amen&M''3 sal.7riteFouble&reg.get"9amen&I''3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3 @ @

public void cerrar&'4 try 4 sal.flus,&'3 sal.close&'3 @ catc,&8-"9ception ioe' 4 System.err.println&<Se ,a producido un "rror: < > ioe.getGessage&''3 ioe.printStacSBrace&'3 @ @ @ $$ fin de la clase de .rc,ivoSal

60.

La clase Dersona establece los campos y mtodos accesores get y modificadores o mutadores set para obtener o cambiar los valores de las variables miembro de la clase. "sta clase ,eredar todos estos miembros a su subclase lumno y que son utilizados a lo largo del programa ejemplo.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. $%% % )lase publica Hersona que es necesaria para el % programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: Hersona.java %$ public class protected protected protected protected protected Hersona 4 int id3 String apellidos3 String nombre3 String cargo3 String tratamiento3

Hersona&' 4 id;T03 nombre;null3 apellidos;null3 tratamiento;null3

$r fes r, Carl s A' Rui- De La Cru- Mel

*2

24. cargo;null3 25. @ 26. 27. Hersona &int id# String apellidos# String nombre# String cargo# String tratamiento' 4 28. t,is.id ; id3 29. t,is.apellidos ; apellidos3 30. t,is.nombre ; nombre3 31. t,is.cargo ; cargo3 32. t,is.tratamiento ; tratamiento3 33. @ 34. 35. $$ metodos accesores y modificadores 36. public int get8d&' 4 return id3@ 37. public void set8d&int nuevoid' 4 id ; nuevoid3 @ 38. public String get.pellidos&' 4 return apellidos3@ 39. public void set.pellidos&String nuevoapellidos' 4 apellidos ; nuevoapellidos3@ 40. public String get!ombre&' 4 return nombre3 @ 41. public void set!ombre&String nuevonombre' 4 nombre ; nuevonombre3 @ 42. public String get)argo&' 4 return cargo3 @ 43. public void set)argo&String nuevocargo' 4 cargo ; nuevocargo3@ 44. public String getBratamiento&' 4 return tratamiento3 @ 45. public void setBratamiento&String nuevotratamiento' 4 tratamiento ; nuevotratamiento3 @ 46. 47. @ $$ fin de Hersona

La clase lumno que es ,ija de la clase Dersona . "n esta clase se manejan las calificaciones de los e9menes de cada alumno con las variables de tipo do"le e&a1# e&a2 y e&a'# la media o promedio con la variable de tipo do"le promedio y la calificacin con la variable Strin! calificacion. Biene los mtodos !etDromedio() y setDromedio() que ,acen las operaciones del clculo del promedio ponderado# y los mtodos set-alificacion() y !et-alificaci1n() para la obtencin de la calificacin en base al promedio. 8mplementa la interface )onstantes tiles para manejar un arreglo de Strings para asignar la calificacin.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. $%% % )lase publica .lumno y que es subclase % de la clase Hersona y que es necesaria para el % programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: .lumno.java %$ public class .lumno e9tends Hersona implements )onstantes tiles 4 private double e9a0# e9aM# e9aI3 private double promedio3 private String calificacion3 .lumno&' 4 super&T0#null#null#null#null'3 e9a0;T03 e9aM;T03 e9aI;T03 promedio;T03 calificacion;null3 @ .lumno&int id# String apellidos# String nombre# String cargo# String tratamiento# double e9a0# double e9aM# double e9aI' 4 super&id#apellidos#nombre#cargo#tratamiento'3 t,is.e9a0 ; e9a03 t,is.e9aM ; e9aM3 t,is.e9aI ; e9aI3 @ public void set"9amen&double e9amen# int noe9a' 4

$r fes r, Carl s A' Rui- De La Cru- Mel

*3

36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.

if & noe9a ;; 0 ' e9a0 ; e9amen3 $$7indo7s if & noe9a ;; M' e9aM ; e9amen3 $$7ord if & noe9a ;; I ' e9aI ; e9amen3 $$e9cel @ public double get"9amen&int noe9a' 4 if & noe9a ;; 0 ' return e9a03 else if & noe9a ;; M' return e9aM3 else if & noe9a ;; I ' return e9aI3 else return T03 @ public void setHromedio&' 4 promedio ; e9a0%1.K > e9aM%1.MK > e9aI%1.MK3 @ public double getHromedio&' 4 setHromedio&'3 return promedio3 @ public void set)alificacion&' 4 if & promedio;; 01.1 ' calificacion ; calificativo516 3 else if & promedio Z; L.LLL ]] promedio ^; L.1' calificacion ; calificativo5063 else if & promedio Z; O.LLLL ]] promedio ^; O.1' calificacion ; calificativo5063 else if & promedio Z; P.LLL ]] promedio ^; P.1' calificacion ; calificativo5063 else if & promedio Z; N.LLL ]] promedio ^; 1.1' calificacion ; calificativo5063 else calificacion ; null3 @ public String get)alificacion&' 4 set)alificacion&'3 return calificacion3 @ @ $$ fin de .lumno

La interface -onstantesAtiles solo sirve para declarar un arreglo constante de objetos Strin! para cada una de las calificaciones y se utiliza en la clase lumno.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 0N. $%% % 8nterface publica con constantes que necesita % el programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: )onstantes tiles.java %$ public interface )onstantes tiles 4 public static String calificativo56 ; 4 <Sobresaliente<# <Guy *ien<#<*ien<#<Fe pansazo<#<*urro no aprobado< @3 @ $$ fin de la interface )onstantes tiles

$r fes r, Carl s A' Rui- De La Cru- Mel

*4

Ainalmente la clase %scri"e tiene el mtodo ponRaya( int lim* Strin! sim" ) el cual se emplea para escribir l(neas de s(mbolos para separar los resultados de la salida y su uso es utilitario.

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

$%% % )lase publica "scribe y que es necesaria para el % programa "valuador.rc,ivosM.java y que enseUa a % utilizar las clases Fata8nputStream y Fata-utputStream % para usar datos con formato en arc,ivos. % +autor -scar .. /onzlez *ustamante % +version 0.1 % .rc,ivo: "scribe.java %$ class "scribe 4 public static void pon:aya&int lim# String simb' 4 for &int i ; 03 i Z; lim3 i>>' System.out.print&simb'3 System.out.println&'3 @ @ $$ fin de la clase "scribe

Banto la interface -onstantesAtiles y la clase %scri"e pudieron ,aber estado en un paquete y luego importadas# incluso las clases lumno# Dersona# rc3i%nt y rc3iSal deber(an ,aber estado en un paquete de clases y luego importadas en la clase %)aluador rc3i)os2 pero esto se deja como ejercicio al lector.

/' RE;UERIMIEN#OS O MA#ERIAL Y E;UI$O So)tAare% 7a,a ! DisFete

0' $ROCEDIMIEN#O El (roce#imie$to co$siste e$ #os (asos Diagrama #e clase Im(leme$taci*$ e$ +a,a *9

$r fes r, Carl s A' Rui- De La Cru- Mel

"jemplo 0 : arc,ivo de te9to


im5 rt +a.a'i '<= im5 rt +a.a'lang'<= im5 rt +a.a'util'<= class #E>#O? $rintStream 5@neA $rintStream7SBstem' ut8= (ufferedReader C@neA (ufferedReader7neA In5utStreamReader7SBstem'in88= String n mCre= String dat 7String mensa+e8? SBstem' ut'5rint7mensa+e8= trB? n mCre@C'readLine7 8= D catcE7IOE6ce5ti n i e8? 5'5rintln7FN se 5uede leerF8= return n mCre= D 5uClic . id escritura7String n mC8? String arcE @ F5rueCa'datF= trB? FileGriter fA @ neA FileGriter 7Fte6t't6tFHtrue8= (ufferedGriter CA @ neA (ufferedGriter 7fA8= $rintGriter salArcE @ neA $rintGriter 7CA8= salArcE'5rintln7n mC8= salArcE'cl se78= D catcE7+a.a'i 'IOE6ce5ti n i e68? D D 5uClic . id m strar78? trB ? FileReader fr@neA FileReader7Fte6t't6tF8= (ufferedReader entrada@neA (ufferedReader7fr8= String s= AEile77s@entrada'readLine7 8 8I@null8? SBstem' ut'5rintln7FSalida del arcEi. , FJs8= entrada'cl se78= D catcE7+a.a'i 'FileN tF undE6ce5ti n fnfe68? D catcE7+a.a'i 'IOE6ce5ti n i e68? D D

5uClic static . id main7String argK L8? #E>#O fun@ neA #E>#O78= fun'escritura7fun'dat 7FIngrese alg al arcEi. M F88= fun'm strar78= D D

$r fes r, Carl s A' Rui- De La Cru- Mel

/:

%jemplo 2. arc3i)o "inario


im5 rt +a.a'i '<= im5 rt +a.a'lang'<= im5 rt +a.a'util'<= class (INARIO? $rintStream 5@neA $rintStream7SBstem' ut8= (ufferedReader C@neA (ufferedReader7neA In5utStreamReader7SBstem'in88= String n mCre= 5uClic String dat 7String mensa+e8? SBstem' ut'5rint7mensa+e8= trB? n mCre@C'readLine7 8= D catcE7IOE6ce5ti n i e8? 5'5rintln7FN se 5uede leerF8= D return n mCre= D 5uClic . id escritura7d uCle d&8? trB? DataOut5utStream d s@ neA DataOut5utStream7 neA (ufferedOut5utStream7neA FileOut5utStream7F5rueCa'datFHtrue888= d s'AriteD uCle7d&8= d s'cl se78= D catcE7+a.a'i 'IOE6ce5ti n i e68? D D 5uClic . id m strar78? NN $ERMI#E MOS#RAR EL VALOR REAL EN EL ARC%IVO String s= trB ? DataIn5utStream disc @ neA DataIn5utStream7neA (ufferedIn5utStream7neA FileIn5utStream7F5rueCa'datF888= File f@ neA File7F5rueCa'datF8= d uCle d*= AEile7f'e6ists7 8 8? d*@disc 'readD uCle7 8= SBstem' ut'5rintln7d*8= D disc 'cl se7 8= D catcE7+a.a'i 'FileN tF undE6ce5ti n fnfe68? D catcE7+a.a'i 'IOE6ce5ti n i e68? D D 5uClic static . id main7String argK L8? (INARIO fun@ neA (INARIO7 8= fun'escritura7Fl at'5arseFl at7fun'dat 7FIngrese un real M F888= fun'escritura7Fl at'5arseFl at7fun'dat 7FIngrese un real M F888= fun'm strar78= D D

E+em5l /' &$ o1+eto guar#a#o me#ia$te serializaci*$


im5 rt +a.a'i '<=

$r fes r, Carl s A' Rui- De La Cru- Mel

/&

5uClic class serial ? 5uClic static . id main7String argsK L8 ? NNSeriali-am s el C+et trB ? MiClase C+& @ neA MiClase7FStringFH &18= SBstem' ut'5rintln7FOC+et &, F J C+&8= OC+ectOut5utStream s @ neA OC+ectOut5utStream7neA FileOut5utStream7FserialF88= s'AriteOC+ect7 C+&8= s'cl se7 8= D catcE 7E6ce5ti n e8 ?SBstem' ut'5rintln7FsiFJe'getMessage788=SBstem'e6it7:8=D NNDeseriali-aciOn del C+et trB ? MiClase C+*= OC+ectIn5utStream is @ neA OC+ectIn5utStream7neA FileIn5utStream7FserialF88= C+* @ 7MiClase8 is'readOC+ect7 8= is'cl se78= SBstem' ut'5rintln7FOC+et *, F J C+*8= D catcE7E6ce5ti n e8 ?SBstem' ut'5rintln7e'getMessage7 88=SBstem'e6it7:8=D D D class MiClase im5lements Seriali-aCle ? String s= int i= 5uClic MiClase7String sH int i8 ? tEis's @ s= tEis'i @ i= D 5uClic String t String78 ? return Fs@F J s J F= i@F J i= D D

E+em5l 0. Earios o1+etos guar#a#os me#ia$te serializacio$


im5 rt +a.a'i '<= class seriali-aci n ? (ufferedReader C@neA (ufferedReader7neA In5utStreamReader7SBstem'in88= String n mCre= String leer7String mensa+e8? SBstem' ut'5rint7mensa+e8= trB? n mCre@C'readLine7 8= D catcE7E6ce5ti n i e8? D return n mCre= D . id E7 8? trB? OC+ectOut5utStream s@ neA OC+ectOut5utStream7neA FileOut5utStream7Fregistr F88= f r7int i@:= iP0= iJJ8?

$r fes r, Carl s A' Rui- De La Cru- Mel

/*

ALUMNO C+&@neA ALUMNO7leer7Fc dig , F8Hleer7Fn mCre , F88= s'AriteOC+ect7 C+&8= D s'cl se7 8= D catcE7E6ce5ti n e8? D D . id M7 8? trB ? ALUMNO C+*= OC+ectIn5utStream is@neA OC+ectIn5utStream7neA FileIn5utStream7Fregistr F88= AEile77 C+*@7ALUMNO8 is'readOC+ect7 88I@null8? SBstem' ut'5rintln7 C+*'Rc7 8J F FJ C+*'Rn7 88= D is'cl se78= D catcE7E6ce5ti n 58? D D 5uClic static . id main7String argsK L8? seriali-aci n s@neA seriali-aci n7 8= s'E7 8= s'M7 8= D D class ALUMNO im5lements Seriali-aCle ? String c= String n= 5uClic ALUMNO7String cHString n8? 5uClic String Rn7 8? return n= D 5uClic String Rc7 8? return c= D D

tEis'c@c= tEis'n@n=

%jemplo /. Hrograma que realiza varias operaciones sobre un arc,ivo &ingresar datos# eliminar segCn el cdigo o clave# modificar datos segCn la clave# ordenar por clave y mostrar todos los datos del arc,ivo '
A co$ti$uaci*$ u$ e+em(lo #e los #atos /ue se (ue#e i$gresar al arc.i,o CLAVE !0 20 G0 GG Diagrama de clases NOM(RE carlos Maria 7ua$ Ele$a EDAD GH 20 I0 J0

$ERSONA $r fes r, Carl s A' Rui- De La Cru- Mel

//

String n= Int Cla.e= Int edad= String leer7String m8= . id E7 8= C lean M7 8= . id O7 8= . id (7 8= . id L7 8=

&' im5 rt +a.a'lang'<= *' im5 rt +a.a'i '<= /' class ARC% ? 0' (ufferedReader teclad @ neA (ufferedReader7neA 1' In5utStreamReader7SBstem'in88= 2' String n= 3' int cla.e@:= 4' int edad@:= 9' l ng tregistr @14= &:' l ng cregistr s@:= &&' 5uClic String leer7String m8? &*' SBstem' ut'5rint7mJF , F8= &/' trB? n@teclad 'readLine7 8= D &0' catcE7E6ce5ti n e8? D &1' return n= &2' D &3' . id E7 8? &4' String n mCre@FF= &9' trB ? *:' File arcE@neA File7FarcEi. &'datF8= *&' Rand mAccessFile arcEi. @neA Rand mAccessFile7arcEHFrAF8= **' cla.e @ Integer'5arseInt7leer7Fdame cla.eF88= */' n mCre@leer7Fdame n mCreF8= *0' if 7n mCre'lengtE7 8 P *18? *1' f r7int i@n mCre'lengtE7 8= i P*1= iJJ8 n mCre@n mCreJF F= *2' D *3' else? n mCre@n mCre'suCstring7:H*18= D= *4' edad @ Integer'5arseInt7leer7Fdame edadF88= *9' if 7arcEi. 'lengtE7 8I@ :8? /:' arcEi. 'seeQ7 arcEi. 'lengtE7 8 8= /&' D= /*' arcEi. 'AriteInt7cla.e8= //' arcEi. 'AriteCEars7n mCre8= /0' arcEi. 'AriteInt7edad8= /1' arcEi. 'cl se7 8= /2' D $r fes r, Carl s A' Rui- De La Cru- Mel

/0

/3' catcE7FileN tF undE6ce5ti n f8 ? SBstem' ut'5rintln7FArcE' N e6isteF8= D /4' catcE 7IOE6ce5ti n e8 ? SBstem' ut'5rintln7FErr r al escriCirF8= D /9' D 0:' C lean M7 8? 0&' String n mCre@FF= 0*' trB? 0/' File arcE@neA File7FarcEi. &'datF8= 00' Rand mAccessFile arcEi. @neA Rand mAccessFile7arcEHFrAF8= 01' cregistr s@arcEi. 'lengtE7 8N tregistr = 02' int n@:= 03' int c @ Integer'5arseInt7leer7Fdame cla.e a CuscarF88= 04' AEile7nPcregistr s8? 09' arcEi. 'seeQ7n<148= 1:' cla.e@arcEi. 'readInt78= 1&' if7cla.e @@ c8? 1*' n mCre@leer7Fdame n mCreF8= 1/' if 7n mCre'lengtE78 P *18? 10' f r7int i@n mCre'lengtE78= i P*1= iJJ8 n mCre@n mCreJF F= 11' D 12' else? n mCre@n mCre'suCstring7:H*18= D= 13' edad @ Integer'5arseInt7leer7Fdame edadF88= 14' arcEi. 'seeQ7n<148= 19' arcEi. 'AriteInt7cla.e8= 2:' arcEi. 'AriteCEars7n mCre8= 2&' arcEi. 'AriteInt7edad8= 2*' arcEi. 'cl se78= 2/' return true= 20' D 21' n@nJ&= 22' D 23' arcEi. 'cl se78= 24' D 29' catcE7FileN tF undE6ce5ti n f8 ? SBstem' ut'5rintln7FArcE' n e6isteF8= D 3:' catcE 7IOE6ce5ti n e8 ? SBstem' ut'5rintln7FErr r al escriCirF8= D 3&' return false= 3*' D 3/' . id O7 8? 30' int c&= 31' String n&= 32' int e&= 33' int c*= 34' String n*= 39' int e*= 4:' C lean salir= 4&' trB ? 4*' File arcE@neA File7FarcEi. &'datF8= 4/' Rand mAccessFile arcEi. @neA Rand mAccessFile7arcEHFrAF8= 40' cregistr s@arcEi. 'lengtE7 8 N tregistr = $r fes r, Carl s A' Rui- De La Cru- Mel /1

41' 42' 43' 44' 49' 9:' 9&' 9*' 9/' 90' 91' 92' 93' 94' 99' &::' &:&' &:*' &:/' &:0' &:1' &:2' &:3' &:4' &:9' &&:' &&&' &&*' &&/' &&0' &&1' &&2' &&3' &&4' &&9' &*:' &*&' &**' &*/' &*0' &*1' &*2' &*3' &*4' &*9' &/:' &/&' &/*' &//'

d ? salir@false= f r 7int r@:= r P 7cregistr sR&8= rJJ8? arcEi. 'seeQ7r<148= c&@arcEi. 'readInt7 8= arcEi. 'seeQ77rJ&8<148= c*@arcEi. 'readInt7 8= if7c&Pc*8? c&@:= n&@FF= e&@:= c*@:= n*@FF= e*@:= arcEi. 'seeQ7r<148= c&@arcEi. 'readInt78= f r7int i @ := i P *1= JJi8? n& J@ arcEi. 'readCEar7 8= D= e&@arcEi. 'readInt78= arcEi. 'seeQ77rJ&8<148= c*@arcEi. 'readInt78= f r7int i @ := i P *1= JJi8? n* J@ arcEi. 'readCEar7 8= D= e*@arcEi. 'readInt78= arcEi. 'seeQ7r<148= arcEi. 'AriteInt7c*8= arcEi. 'AriteCEars7n*8= arcEi. 'AriteInt7e*8= arcEi. 'seeQ77rJ&8<148= arcEi. 'AriteInt7c&8= arcEi. 'AriteCEars7n&8= arcEi. 'AriteInt7e&8= salir@true= D D DAEile7salir8= arcEi. 'cl se78= D catcE7FileN tF undE6ce5ti n f8 ? SBstem' ut'5rintln7FArcE' n e6isteF8= D catcE 7IOE6ce5ti n e8 ? SBstem' ut'5rintln7FErr r al escriCirF8= D D . id (7 8? int c&= String n&@FF= int e&= String n mCre@FF= C lean c nd@false= int Q= trB? File arcE@neA File7FarcEi. &'datF8= Rand mAccessFile arcEi. @neA Rand mAccessFile7arcEHFrAF8= /2

$r fes r, Carl s A' Rui- De La Cru- Mel

&/0' &/1' &/2' &/3' &/4' &/9' &0:' &0&' &0*' &0/' &00' &01' &02' &03' &04' &09' &1:' &1&' &1*' &1/' &10' &11' &12' &13' &14' &19' &2:' &2&' &2*' &2/' &20' &21' &22' &23' &24' &29' &3:' &3&' &3*' &3/' &30' &31' &32' &33' &34' &39' &4:' &4&' &4*'

cregistr s@arcEi. 'lengtE7 8 N tregistr = int n@:= int c @ Integer'5arseInt7leer7Fdame cla.e a CuscarF88= AEile7nPcregistr s8? arcEi. 'seeQ7n<148= cla.e@arcEi. 'readInt7 8= if7cla.e @@ c8? c nd@true= CreaQ=D n@nJ&= D Q@n= if7c nd8? f r7==8? QJJ= if7QP cregistr s8? arcEi. 'seeQ7Q<148= c&@arcEi. 'readInt7 8= f r7int i @ := i P *1= JJi8? n& J@ arcEi. 'readCEar7 8=D= e&@arcEi. 'readInt7 8= arcEi. 'seeQ7n<148= arcEi. 'AriteInt7c&8= arcEi. 'AriteCEars7n&8= arcEi. 'AriteInt7e&8= n&@FF= nJJ= D else ? arcEi. 'cl se7 8= File arcE*@neA File7FarcEi. &'datF8= Rand mAccessFile arcEi. *@neA Rand mAccessFile7arcEHFrAF8= arcEi. *'setLengtE7n<148= arcEi. *'cl se78= CreaQ= D D D else arcEi. 'cl se7 8= D catcE7FileN tF undE6ce5ti n f8 ? SBstem' ut'5rintln7FArcE' n e6isteF8= D catcE 7IOE6ce5ti n e8 ? SBstem' ut'5rintln7FErr r al escriCirF8= D D . id L7 8? int cla.e@:= String n mCre@FF= int edad@:= trB ? File arcE@neA File7FarcEi. &'datF8= Rand mAccessFile arcEi. @neA Rand mAccessFile7arcEHFrAF8= cregistr s@arcEi. 'lengtE7 8 N tregistr = f r 7int r@:= r P cregistr s= rJJ8? cla.e@arcEi. 'readInt7 8= f r7int i @ := i P *1= JJi8? n mCre J@ arcEi. 'readCEar7 8= D= /3

$r fes r, Carl s A' Rui- De La Cru- Mel

&4/' &40' &41' &42' &43' &44' &49' &9:' &9&' &9*' &9/' &90' &91' &92' &93' &94' &99' *::' *:&' *:*' *:/' *:0' *:1' *:2' *:3'

edad@arcEi. 'readInt7 8= SBstem' ut'5rintln7cla.eJF FJn mCreJF FJedad8= n mCre@FF= D= arcEi. 'cl se7 8= D catcE7FileN tF undE6ce5ti n f8 ? SBstem' ut'5rintln7FArcE' n e6isteF8= D catcE 7IOE6ce5ti n e8 ? SBstem' ut'5rintln7FErr r al escriCirF8= D D 5uClic static . id main7StringK L args8 ? ARC% a@neA ARC%78= f r7==8? SBstem' ut'5rintln7FIngresar P&MSn Ver P*M Sn Ordenar P/M Sn M dificar P0M Sn ( rrar P1M Sn Salir P2MF8= sAitcE 7Integer'5arseInt7a'leer7F 5ci n , F888? case &,a'E7 8=CreaQ= case *,a'L7 8=CreaQ= case /,a'O7 8=CreaQ= case 0,a'M7 8=CreaQ= case 1,a'(7 8=CreaQ= case 2,SBstem'e6it7:8= D D D NN cierra main D NN cierra clase

E+ercici Escri1a u$ (rograma usa$#o arc.i,os /ue (ermita guar#ar la i$)ormaci*$ #e u$a )actura co$ #atos como )ec.a- $om1re #e la em(resa ' lista #e tems 3c*#igo- (recio u$itario- #escri(ci*$ #el (ro#ucto- ca$ti#a#4

1' ANALISIS DE RESUL#ADOS Es u$ co$ce(to im(orta$te- (ues (ermite /ue u$ o1+eto (ue#a ser usa#o e$ #i)ere$tes mome$tos a lo largo #el tiem(o- (or el mismo (rograma o (or otros- as como e$ #i)ere$tes i$stalacio$es #e .ar#Aare e$ el mismo mome$to. &$ objeto persistente es a/u8l /ue co$ser,a su esta#o e$ u$ me#io #e almace$amie$to (erma$e$te- (u#ie$#o ser reco$strui#o (or el mismo u otro (roceso. Al o1+eto $o (ersiste$te lo llamamos efmero. Los #atos ge$eralme$te se almace$a$ co$ alg6$ ti(o #e orga$izaci*$- (or e+em(lou$ registro- /ue agru(a #atos #e #i)ere$tes ti(os 3e$teros- stri$g- etc4. E$ los le$gua+es #e (rogramaci*$ 99- como 7a,a- CKK- etc- los #atos se orga$iza$ e$ u$ ti(o #e #atos #e)i$i#o (or el usuario 3TAD4 /ue reci1e el $om1re #e Clase. Esto (rese$ta la ,e$ta+a #e /ue a#em0s #e i$cluir los cam(os tra#icio$ales #e u$ registro 3e$ )orma #e atri1utos4 tam1i8$ (ue#e i$cor(orar u$a /4

$r fes r, Carl s A' Rui- De La Cru- Mel

serie #e m8to#os /ue (ermite$ (rocesar #e ma$era mas )0cil los cam(os o atri1utos #e la clase. 2' (I(LIO"RAFIA
Tent Reisd r5E. A(re$#ie$#o Lorla$# CKK Luil#er G e$ 2! Das. Pre$tice ;all ;is(a$oamerica$a S. A. !MM8 (ertrand MeBer. Co$strucci*$ #e So)tAare 9rie$ta#o a 91+etos. Pre$tice ;allsegu$#a e#ici*$ AndreA C' StaugaardH )r . T8c$icas Estructura#as ' 9rie$ta#as a 91+etos. Pre$tice ;all ;is(a$oamerica$a S.A. !MM8. Fc ' )a.ier CeCall s' 7a,a 2 Curso #e Programaci*$. Al)aomega Ra Ma Luis ) Banes Aguilar. Programaci*$ 9rie$ta#a a 91+etos- Segu$#a e#ici*$. McNraA ;ill I$teramerica$a De Es(a?a S.A. &- !MM8 %erCert ScEildt' Tur1o C5CKK Ma$ual #e Re)ere$cia- u$a i$)ormaci*$ com(leta i#eal (ara to#o usuario #e Tur1o C5CKK. 9s1or$e5 McNraA ;ill- !MMM

$r fes r, Carl s A' Rui- De La Cru- Mel

/9

You might also like