Transcript
“AÑO DE LA DIVERSIFICACIÓN PRODUCTIVA Y DEL FORTALECIMIENTO DE LA EDUCACIÓN”
UNIVERSIDAD NACIONAL DE PIURA FACULT FACULTA AD DE INGENIERIA INGENIERI A INDUSTRIAL ESCUELA DE INGENIERIA INFORMATICA
TEMA:
FICHEROS Y NODOS
CURSO:
ALGORITMIA Y METODO DE ACCESO
PROFESOR: ING.MOISES SAAVEDRA SARANGO
ALUMNO:
ODAR BENITES JOSUE.
CICLO:
V
FECHA: FECHA:
22-0-20!"
FLUJOS Y ARCHIVOS
Un fichero (archivo) de datos o, sim!emente, "n archivo es "na co!ecci#n de re$istros re!acionados entre s%, con asectos en com&n ' or$aniados ara "n ro#sito esec%fico *or e+em!o, "n fichero de "na c!ase esco!ar contiene "n con+"nto de re$istros de !os est"diantes de esa c!ase Otros e+em!os, e! fichero de n#minas de "na emresa, e! fichero de inventario, stocs, etc Un archivo en "na com"tadora es "na estr"ct"ra dise-ada ara contener datos Los datos est.n or$aniados de ta! modo /"e "edan ser rec"erados f.ci!mente, act"a!iados o 0orrados ' a!macenados de n"evo en e! archivo con todos !os cam0ios rea!iados Se$&n !as caracter%sticas de! soorte em!eado ' e! modo en /"e se han or$aniado !os re$istros, se consideran dos tios de acceso a !os re$istros de "n archivo1 2
Acceso sec"encia!
2
Acceso directo
3! acceso sec"encia! im!ica e! acceso a "n archivo se$&n e! orden de a!macenamiento de s"s re$istros, "no tras otro 3! acceso directo im!ica e! acceso a "n re$istro determinado, sin /"e e!!o im!i/"e !a cons"!ta de !os re$istros recedentes 3ste tio de acceso s#!o es osi0!e con soortes direcciona!es 3n Java, "n archivo es, senci!!amente, "na sec"encia de 0'tes, /"e son !a reresentaci#n de !os datos a!macenados Java disone de c!ases ara tra0a+ar !as sec"encias de 0'tes como datos de tios 0.sicos (int, do"0!e, Strin$)4 inc!"so, ara escri0ir o !eer de! archivo o0+etos 3! dise-o de! archivo es e! /"e esta0!ece !a forma de mane+ar !as sec"encias de 0'tes, con "na or$aniaci#n sec"encia!, o 0ien de acceso directo Un f!"+o (stream) es "na a0stracci#n /"e se refiere a "n f!"+o corriente de datos /"e f!"'en entre "n ori$en o f"ente (rod"ctor) ' "n destino o s"midero (cons"midor) 3ntre e! ori$en ' e! destino de0e e5istir "na cone5i#n o cana! (ie) or !a /"e circ"!en !os datos La aert"ra de "n archivo s"one esta0!ecer !a cone5i#n de! ro$rama con e! disositivo /"e contiene a! archivo, or e! cana! /"e com"nica e! archivo con e!
ro$rama van a f!"ir !as sec"encias de datos A0rir "n archivo s"one crear "n o0+eto /"e /"eda asociado a "n f!"+o A! comenar !a e+ec"ci#n de "n ro$rama, en Java se crean a"tom.ticamente tres o0+etos f!"+o, son tres cana!es or !os /"e "eden f!"ir datos , de entrada o de sa!ida 3stos son o0+etos definidos en !a c!ase S'stem1 S'stemin4 O0+eto entrada est.ndar4 ermite !a entrada a! ro$rama de f!"+os de 0'tes desde e! tec!ado S'stemo"t4 O0+eto sa!ida est.ndar4 ermite a! ro$rama !a sa!ida de datos or anta!!a S'stemerr4 O0+eto ara sa!ida est.ndar de errores4 ermite a! ro$rama !a sa!ida de errores or anta!!a 3n Java, "n archivo es sim!emente "n f!"+o e5terno, "na sec"encia de 0'tes a!macenados en "n disositivo e5terno (norma!mente en disco) Si e! archivo se a0re ara sa!ida, es "n f!"+o de archivo de sa!ida Si e! archivo se a0re ara entrada, es "n f!"+o de archivo de entrada Los ro$ramas !een o escri0en en e! f!"+o, /"e "ede estar conectado a "n disositivo o a otro 3! f!"+o es, or tanto, "na a0stracci#n, de ta! forma /"e !as oeraciones /"e rea!ian !os ro$ramas son so0re e! f!"+o indeendientemente de! disositivo a! /"e est6 asociado
FIL3
3sta c!ase es "na reresentaci#n a0stracta de "n archivo o directorio de !os sistemas de archivos File arch = new File(“C: \ \ texto.txt ”); / / arq representa al archivo texto.txt File dir = new File(“C: \ \ tmp”); / / dir representa el directorio c: \ tmp i ( dir.exist s() !! dir.is"irector# () ) $ %trin&' arqs = dir.list (); / / lista de los archivos
La c!ase Fi!e roorciona m6todos com"nes ara verificar /"e e5iste !a r"ta de acceso en !a m./"ina !oca!, crear o e!iminar e! directorio7 fichero con e! nom0re esecificado, o0tener !a r"ta com!eta de! directorio7 fichero, hace "na !ista de todos !os archivos en !a r"ta de! directorio, comr"e0a !as roiedades de! archivo (data, readon!', et c) ' otras caracter%sticas Java "ti!ia dos reresentaciones de te5tos1 Unicode internamente ' U8F ara I 7 O 9o accederemos a !os datos de estos archivos directamente *ara e!!o vamos a "ti!iar !os streams (f!"+os) de entrada ' sa!ida de datos ,
de !a c!ase
RandomAccessFi!e RA9:O; ACC3SSFIL3 La c!ase RandomAccessFi!e ofrece !a osi0i!idad de acceder a !os archivos de forma no sec"encia!, accede a "na osici#n de! archivo, escri0e o !ee !os datos de! archivo 3! constr"ctor de !a c!ase co$e dos ar$"mentos1 "na instancia Fi!e ' otra Strin$ con e! modo de acceso, /"e "ede ser AJO 9IV3L Las c!ases Fi!eIn"tStream ' Fi!eO"t"tStream son dos c!ases de 0a+o nive! de !ect"ra ' escrit"ra de datos de "n archivo en disco 3stas dos c!ases tienen dos constr"ctores, "n constr"ctor reci0e "n archivo ' e! otro reci0e "na cadena con e! nom0re de !a r"ta de! archivo 3stas c!ases s#!o f"ncionan con !a !ect"ra ' escrit"ra de 0'tes de datos, ara e!!o, tienen !os m6todos read () ' =rite (), resectivamente Am0as c!ases tienen e! m6todo c!ose() La c!ase Fi!eIn"tStream tiene otros m6todos como1 ava!ia0!e () ' si () Fi l e arch = new Fi l e(“C:\ \ texto. txt”); Fi l e50tp0t%tr eam os = new Fi l e50tp0t%tr eam( arch ); os. write( “%trin& q0e va ser &0ardada”. &et6#tes() ); os. close(); File arch = new Fi l e(“C:\ \ texto. txt”); File7np0t%tream is = new File7np0t%tream( arch ); -#te -#te8ido = (-#te) is. read(); -#te' -#tes = new -#te'12; i s. read( -#tes ); %#stem.o0t.println( -#tes );
i s. cl ose();
35isten tam0i6n otras c!ases de 0a+o nive!, como In"tStream ' O"t"tStream, /"e son !as c!ases adres de !as c!ases de stream de 0a+o nive!
Adem.s,
tam0i6n tenemos !as c!ases1 >'teArra'
In"tStream,
>'teArra'
O"t"tStream,
'
*iedIn"tStream
*iedO"t"tStream
S8R3A;S :3 AL8O 9IV3L Los streams de a!to nive! ermiten !a !ect"ra ' escrit"ra de datos so0re otros tios,
adem.s de !os 0'tes de datos 3stas c!ases e5tienden !as c!ases
Fi!terIn"tStream ' Fi!terO"t"tStream ' ara !a entrada ' sa!ida 3n rea!idad, !as c!ases no !een directamente desde "n archivo, sino /"e !een de otro stream File arch = new Fi l e(“C:\ \ texto. txt”); Fi le50tp0t%tream os = new Fi le50tp0t%tream( arch ); "ata50tp0t%tream dos = new "ata50tp0t%tream( os ); dos. write"o0-le( 122. 99 ); dos. writeF(“%trin& con texto F”); dos. cl ose(); os. cl ose(); / / cierre todos l os streams Fi le arch = new Fi l e(“C:\ \ texto. txt”); Fi le7np0t%tream i s = new Fi le7np0t%tr eam( arch ); "ata7np0t%tream di s = new "ata7np0t%tream( i s ); do0-le d = di s. read"o0-l e(); %trin& s = di s. readF(); dis. close(); is.close(); / / cierre todos l os streams
Ha' otras c!ases de a!to nive! como >"fferedIn"tStream ' >"fferedO"t"tStream, /"e son !as c!ases /"e "ti!ian e! 0"ffer de memoria 8am0i6n tenemos !as c!ases1 *rintStream ara escri0ir tios rimitivos como reresentaciones de car.cter ' !a c!ase *"sh0acIn"tStream
R3A:3R Y ?RI83R 3! reader ' e! =riter se 0asan en !os datos de !ect"ra ' escrit"ra en formato Unicode 3! archivo de0e contener s#!o datos en formato U8F Los reader ' =riter "eden ser de 0a+o nive! ' de a!to nive! Un 0"en e+em!o de Readers ' ?riters de 0a+o nive! son !as c!ases Fi!eReader ' Fi!e?riter Fi l e arch = new Fi l e(“C:\ \ texto. txt”); Fi leriter w = new Filer i ter ( arch ); w. wr i te(“8i nea 1\ n8i nea \ n8i nea <\ n8i nea ”); w. cl ose(); File*eader r = new Fi le*eader ( arch ); 8ine>0m-er *eader lnr = new 8ine>0m-er *eader ( r ); %trin& s; while( (s = lnr . read8i ne()) ?= n0l l ) $ %#stem. o0t. printl n(lnr . &et8ine>0m-er () @ “:” @ s); lnr . cl ose(); r . cl ose();
Las c!ases de a!to nive! soortes !os m6todos de 0a+o nive!, ' m6todos ara mani"!ar !a !ect"ra en 0"ffer , !a !ect"ra de !%nea , etc 8odas estas c!ases se e5tienden de !as c!ases Reader ' ?riter
S3RIALI@ACI9 :3 O>J38OS
La seria!iaci#n es e! roceso de desentra-ar e! o0+eto ' ersistir!o en c"a!/"ier !"$ar , es decir , se re$istra e! o0+eto con !os datos de s" estado act"a!, as% como !os o0+etos re!acionados con este Los o0+etos /"e van a ser seria!iados de0en im!ementar !a interfa +avaioSeria!ia0!e 3stos o0+etos, "ti!iando !os streams tam0i6n "eden via+ar en !a red Aersona per s = new Aersona(); per s. set>om-r e(“Bi&0el ”); per s. setdad(OL3S >I9ARIOS
Un .r0o! 0inario es "n .r0o! c"'os nodos no "eden tener m.s de dos s"0.r0o!es 3n "n .r0o! 0inario, cada nodo "ede tener cero, "no o dos hi+os (s"0.r0o!es) Se conoce e! nodo de !a i/"ierda como hi+o i/"ierdo ' e! nodo de !a derecha como hi+o derecho Un .r0o! 0inario no "ede tener m.s de dos s"0.r0o!es
Un .r0o! 0inario es "na estr"ct"ra rec"rsiva Cada nodo es !a ra% de s" roio s"0.r0o! ' tiene hi+os, /"e son ra%ces de .r0o!es, !!amados s"0.r0o!es derecho e i/"ierdo de! nodo, resectivamente Un .r0o! 0inario se divide en tres s"0con+"ntos dis+"ntos1 NR
9odo ra%
NI,
IG,
In S"0.r0o! i/"ierdo de R
N:,
:G,
:n S"0.r0o! derecho de R
3n c"a!/"ier nive! n , "n .r0o! 0inario "ede contener de a Gn nodos 3! n&mero de nodos or nive! contri0"'e a !a densidad de! .r0o!
3S8RUC8URA :3 U9 MR>OL >I9ARIO Un .r0o! 0inario se constr"'e con nodos Cada nodo de0e contener e! camo dato (datos a a!macenar) ' dos camos de en!ace (a"ntador),"no a! s"0.r0o! i/"ierdo (i/"ierdo, ido)' otro a! s"0.r0o! derecho (derecho, dcho) 3! va!or n"!! indica "n .r0o! o "n s"0.r0o! vac%o La Fi$"ra m"estra !a reresentaci#n en!aada de dos .r0o!es 0inarios de ra% A 3! rimero es "n .r0o! de$enerado a !a i/"ierda4 e! se$"ndo es "n .r0o! 0inario com!eto de rof"ndidad
R3*R3S398ACI9 :3 U9 9O:O
La c!ase 9odo a$r"a a todos !os camos de /"e consta1 dato, ido(rama i/"ierda) ' dcho (rama derecha) Adem.s, disone de dos constr"ctores4 e! rimero inicia!ia e! camo dato a "n va!or ' !os en!aces a n"!!, en definitiva, se inicia!ia como ho+a ' e! se$"ndo inicia!ia dato a "n va!or ' !as ramas a dos s"0.r0o!es pac4a&e ar-ol6inario; p0-lic class >odo $ protected 5-Eect dato; protected >odo iGdo; protected >odo dcho; p0-lic >odo(5-Eect valor) $ dato = valor; iGdo = dcho = n0ll; p0-lic >odo(>odo rama7Gdo, 5-Eect valor, >odo rama"cho) $ this(dato); iGdo = rama7Gdo; dcho = rama"cho; // operaciones de acceso p0-lic 5-Eect valor>odo()$ ret0rn valor; p0-lic >odo s0-ar-ol7Gdo()$ ret0rn iGdo; p0-lic >odo s0-ar-ol"cho()$ ret0rn dcho; p0-lic void n0evoHalor(5-Eect d)$ dato = d; p0-lic void rama7Gdo(>odo n)$ iGdo = n; p0-lic void rama"cho(>odo n)$ dcho = n;
CR3ACI9 :3 U9 MR>OL >I9ARIO A artir de! nodo ra% de "n .r0o! se "ede acceder a !os dem.s nodos de! .r0o!, or e!!o se mantiene !a referencia a !a ra% de! .r0o! Las ramas i/"ierda ' derecha son, a s" ve, .r0o!es 0inarios /"e tienen s" ra%, ' as% rec"rsivamente hasta !!e$ar a !as ho+as de! .r0o! La c!ase Ar0o! >inario tiene e! camo rai, "n constr"ctor /"e inicia!ia ra% ' m6todos ara im!ementar !as oeraciones pac4a&e ar-ol6inario; p0-lic class +r-ol6inario $ protected >odo raiG; p0-lic +r-ol6inario() $ raiG = n0ll; p0-lic +r-ol6inario(>odo raiG) $ this.raiG = raiG; p0-lic >odo raiG+r-ol() $ ret0rn raiG; // Compr0e-a el estat0s del Ir-ol -oolean esHacio() $ ret0rn raiG == n0ll; //
3! m6todo n"evoAr0o!()crea "n .r0o! de ra% "n nodo con e! camo dato, rama i/"ierda ' derecha asadas en !os ar$"mentos p0-lic static >odo n0evo+r-ol( >odo rama7Gqda, 5-Eect dato, >odo rama"rcha) $ ret0rn new >odo(rama7Gqda, dato, rama"rcha); +sJ, para crear el Ir-ol -inario de la Fi&0ra 1<.1K, se 0tiliGa 0n esq0ema sec0encial # con 0na Aila
(vLase el CapJt0lo 9) q0e &0arda, en cada paso, los s0-Ir-oles:
import ipoAila.AilaHector; +r-ol6inario ar-ol; >odo a1, a, a; AilaHector pila = new AilaHector(); a1 = +r-ol6inario.n0evo+r-ol(n0ll,MBariaM,n0ll); a = +r-ol6inario.n0evo+r-ol(n0ll,M*odri&oM,n0ll); a = +r-ol6inario.n0evo+r-ol(a1,MsperanGaM,a); pila.insertar(a); a1 = +r-ol6inario.n0evo+r-ol(n0ll,M+n#oraM,n0ll); a = +r-ol6inario.n0evo+r-ol(n0ll,M+-elM,n0ll); a = +r-ol6inario.n0evo+r-ol(a1,MB Nes0sM,a); pila.insertar(a); a = (>odo) pila.q0itar(); a1 = (>odo) pila.q0itar(); a = +r-ol6inario.n0evo+r-ol(a1,MsperanGaM,a); ar-ol = new +r-ol6inario(a);