Preview only show first 10 pages with watermark. For full document please download

Ficheros Y Arboles En Java

Descripción: Trabajo en empleo de ficheros y arboles

   EMBED


Share

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 asectos en com&n ' or$aniados ara "n ro#sito esec%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 emresa, e! fichero de inventario, stocs, etc Un archivo en "na com"tadora es "na estr"ct"ra dise-ada ara contener datos Los datos est.n or$aniados de ta! modo /"e "edan ser rec"erados f.ci!mente, act"a!iados o 0orrados ' a!macenados de n"evo en e! archivo con todos !os cam0ios rea!iados Se$&n !as caracter%sticas de! soorte em!eado ' e! modo en /"e se han or$aniado !os re$istros, se consideran dos tios 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 tio de acceso s#!o es osi0!e con soortes direcciona!es 3n Java, "n archivo es, senci!!amente, "na sec"encia de 0'tes, /"e son !a reresentaci#n de !os datos a!macenados Java disone de c!ases ara tra0a+ar !as sec"encias de 0'tes como datos de tios 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$aniaci#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! (ie) or !a /"e circ"!en !os datos La aert"ra de "n archivo s"one esta0!ecer !a cone5i#n de! ro$rama con e! disositivo /"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! comenar !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'stemin4 O0+eto entrada est.ndar4 ermite !a entrada a! ro$rama de f!"+os de 0'tes desde e! tec!ado S'stemo"t4 O0+eto sa!ida est.ndar4 ermite a! ro$rama !a sa!ida de datos or anta!!a S'stemerr4 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 disositivo 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 disositivo o a otro 3! f!"+o es, or tanto, "na a0stracci#n, de ta! forma /"e !as oeraciones /"e rea!ian !os ro$ramas son so0re e! f!"+o indeendientemente de! disositivo a! /"e est6 asociado FIL3 3sta c!ase es "na reresentaci#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 roorciona 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 esecificado, o0tener !a r"ta com!eta de! directorio7 fichero, hace "na !ista de todos !os archivos en !a r"ta de! directorio, comr"e0a !as roiedades de! archivo (data, readon!', et c) ' otras caracter%sticas Java "ti!ia dos reresentaciones de te5tos1 Unicode internamente ' U8F ara I 7 O  9o accederemos a !os datos de estos archivos directamente *ara e!!o vamos a "ti!iar !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 (), resectivamente Am0as c!ases tienen e! m6todo c!ose() La c!ase Fi!eIn"tStream tiene otros m6todos como1 ava!ia0!e () ' si () 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, ' *iedIn"tStream *iedO"t"tStream S8R3A;S :3 AL8O 9IV3L Los streams de a!to nive! ermiten !a !ect"ra ' escrit"ra de datos so0re otros tios, 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. writeF(“%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. readF(); 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!ian e! 0"ffer de memoria 8am0i6n tenemos !as c!ases1 *rintStream ara escri0ir tios rimitivos como reresentaciones de car.cter  ' !a c!ase *"sh0acIn"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 leriter w = new Filer 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! soortes !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@ACI9 :3 O>J38OS La seria!iaci#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!iados de0en im!ementar !a interfa +avaioSeria!ia0!e 3stos o0+etos, "ti!iando !os streams tam0i6n "eden via+ar en !a red Aersona per s = new Aersona(); per s. set>om-r e(“Bi&0el ”); per s. setdad(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" roio s"0.r0o! ' tiene hi+os, /"e son ra%ces de .r0o!es, !!amados s"0.r0o!es derecho e i/"ierdo de! nodo, resectivamente 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! camo dato (datos a a!macenar) ' dos camos de en!ace (a"ntador),"no a! s"0.r0o! i/"ierdo (i/"ierdo, ido)' 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 reresentaci#n en!aada 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*R3S398ACI9 :3 U9 9O:O La c!ase 9odo a$r"a a todos !os camos de /"e consta1 dato, ido(rama i/"ierda) ' dcho (rama derecha) Adem.s, disone de dos constr"ctores4 e! rimero inicia!ia e! camo dato a "n va!or ' !os en!aces a n"!!, en definitiva, se inicia!ia como ho+a ' e! se$"ndo inicia!ia 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;   CR3ACI9 :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! camo rai, "n constr"ctor /"e inicia!ia ra% ' m6todos ara im!ementar !as oeraciones 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! camo 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,MsperanGaM,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,MsperanGaM,a); ar-ol = new +r-ol6inario(a);