Java Programozás 10. Ea: Extrák 77/1 B ITv: MAN 2018.02.05
77/2
XML Extensible Markup Language Kiterjeszthető jelölő nyelv A W3C által ajánlott általános célú leíró nyelv Célja elsősorban adatok, információk, és ezek struktúráinak leírása A HTML-hez hasonlóan egyszerű felépítésű, azonban annál általánosabb funkciójú, rugalmasabb, mégis szintaktikai szempontból szigorúbb is, ami leegyszerűsíti az ipari méretű fejlesztést és hibakezelést. Az XML kidolgozásakor elsődleges volt az egyszerűség, a széleskörű alkalmazhatóság beleértve az Interneten való felhasználhatóságot is. 77/3
XML Extensible Markup Language Felépítése: Az XML 1.0 definiálja a tag és az attribútum fogalmát. Az XML-ben az adatok tagok között jelennek meg Pl: A tagokat < > jelek határolják A záró tag / jellel kezdődik A tagok adják meg a közrezárt adat jelentését, értelmezését <konyv> <szerzo>brian W. Aldiss</szerzo> <cim>amíg világ a világ</cim> </konyv> 77/4
XML Extensible Markup Language Felépítése: Az XML-ben az attribútum az értelmezőnek szóló paraméter, melyet név = "érték" formában kell megadni. Az attribútumok lehetnek a dokumentumhoz kapcsolódó általános értékek, és lehetnek adatok is. Pl: <?xml version="1.0" encoding="iso-8859-2" standalone="no"?> <konyv mufaj="sci-fi"> <szerzo>brian W. Aldiss</szerzo> <cim>amíg világ a világ</cim> </konyv> 77/5
XML Extensible Markup Language Használata: A táblázatokat, címjegyzékeket és egyéb strukturált adatot előállító programok az adatokat időről-időre lemezre kell, hogy mentsék, valamilyen bináris vagy szöveges formátumban. A szöveges formátum előnye, hogy - amennyiben szükséges - akár ember által is elolvasható anélkül, hogy az azt előállító programot le kéne futtatni; a megtekintéséhez elegendő egy tetszőleges szövegszerkesztő használata. A szöveges formátum egy másik előnye, hogy a fejlesztők sokkal könnyebben tudják megtalálni benne az esetleges hibákat. A HTML-hez hasonlóan az XML fájlok sem azért készültek, hogy az embereknek el kelljen olvasni azokat, de ha szükséges, mégis megtehetik. 77/6
DOM Document Object Model A DOM egy platform- és nyelvfüggetlen felület, amely alapvető módja az XML fájlok elérésének, manipulálásának. A DOM egymással gyerek-szülő kapcsolatban álló objektumok rendszere. A dokumentum tartalmát, illetve a dokumentum valamennyi összetevőjét magában foglalja. XML Property Konyv Method Encoding Indent Mufaj Szerzo Cim 77/7
XML készítés Java nyelven Elnevezések: 1. 2. 3. 1. 2. 3. XML declaration: az értelmezőnek szóló információk helye. Az egyes tulajdonságokat a setoutputproperty() metódussal lehet beállítani. Root element: a legfelső szintű adattag. Ennek a tagnak csak neve van. Java neve: Element. Az Element konténer típusú objektum, van neve, és lehet bele értéket is rakni. A createelement() metódussal jön létre. Child element: adattag. Neve és értéke van. Szintén Element. Ha létrehoztuk a createelement() metódussal, a createtextnode() paranccsal rakhatunk bele értéket. 77/8 Az Element-ek, mivel konténerek, egymásba rakhatók, így többszintű xml tartalom alakítható ki.
XML készítés Java nyelven import javax.xml.parsers.*; import javax.xml.transform.*; import javax.xml.transform.dom.*; import javax.xml.transform.stream.*; import org.xml.sax.*; import org.w3c.dom.*; import java.io.*; public class XMLWriter { public static void main (String args[]) { Minden importált csomag a Java SE része, nem kell külső csomagokat letölteni! 77/9
XML készítés Java nyelven DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); Document dom; try { DocumentBuilder db = dbf.newdocumentbuilder(); dom = db.newdocument(); Element rootele = dom.createelement("konyv"); Element e = null; e=dom.createelement("szerzo"); e.appendchild(dom.createtextnode("brian W. Aldiss")); rootele.appendchild(e); e=dom.createelement("cim"); e.appendchild(dom.createtextnode("amíg világ a világ")); rootele.appendchild(e); dom.appendchild(rootele); 77/10
XML készítés Java nyelven try { Transformer tr = TransformerFactory.newInstance().newTransformer(); tr.setoutputproperty(outputkeys.indent, "yes"); tr.setoutputproperty(outputkeys.method, "xml"); tr.setoutputproperty(outputkeys.encoding, "ISO-8859-2"); tr.setoutputproperty("{http://xml.apache.org/xslt indent-amount", "4"); tr.transform(new DOMSource(dom), new StreamResult(new FileOutputStream("konyv.xml"))); System.out.println("Adatok kiírva!"); catch (TransformerException te) {System.out.println("XmlWriter: "+te.getmessage()); catch (IOException ioe) {System.out.println("XmlWriter: "+ioe.getmessage()); catch (ParserConfigurationException pce) {System.out.println("XmlWriter: "+pce.getmessage()); //end main 77/11 // end program
XML készítés Java nyelven Adatok DocumentBuilder DOM Transformer XML file 77/12
XML olvasás Java nyelven XML file DocumentBuilder DOM Kiolvasás Adatok 1. Megnyitjuk a fájlt, és beolvassuk a tartalmát. 2. A beolvasott adatokból felépítjük a DOM-ot. 3. A DOM-ból kiolvassuk a node-okat (csomópontokat, adatokat). 4. A node-okból kiolvassuk az adatokat, és feldolgozzuk azokat. 77/13
XML olvasás Java nyelven import org.xml.sax.*; import org.w3c.dom.*; import java.io.*; public class XMLReader { public static void main (String args[]) { String szerzo, cim; Document dom; DocumentBuilderFactory dbf=documentbuilderfactory.newinstance(); 77/14
XML olvasás Java nyelven 1. 2. 3. 4. 77/15 try { DocumentBuilder db = dbf.newdocumentbuilder(); dom = db.parse("konyv.xml"); NodeList nodelist = dom.getelementsbytagname("konyv"); Node node = nodelist.item(0); Element element = (Element) node; szerzo = element.getelementsbytagname("szerzo").item(0).gettextcontent(); cim = element.getelementsbytagname("cim").item(0).gettextcontent(); System.out.println(szerzo+": "+cim); System.out.println("Adatok beolvasva!"); catch (ParserConfigurationException pce) {System.out.println("XmlReader: "+pce.getmessage()); catch (SAXException se) {System.out.println("XmlReader: "+se.getmessage()); catch (IOException ioe) {System.out.println("XmlReader: "+ioe.getmessage());
XML olvasás Java nyelven Az xml fájlok általában nemcsak egy adatsort tartalmaznak, hanem sokat Célszerű úgy felépíteni a tartalmukat, hogy az ismétlődő adatsort berakjuk egy külső konténerbe (konyvek), így egy ciklus segítségével könnyebb olvasni az adatokat. 77/16
XML olvasás Java nyelven NodeList nodelist = dom.getelementsbytagname("emp"); for(int i = 0; i < nodelist.getlength(); i++) { Node node = nodelist.item(i); Element element = (Element) node; szerzo = element.getelements... cím = element.getelements... System.out.println(szerzo+": "+cim); 77/17
77/18
DAT Bináris fájlba írás Típusos fájl, melynek alapja az a típus, amit letárolunk Az osztálynak implementálnia kell a Serializable interfészt, mely képes az osztály adatait bájtfolyammá alakítani import java.io.serializable; public class Konyv implements Serializable { private String szerzo; private String cim; 77/19 public Konyv(String s, String c){ szerzo = s; cim = c; public String getszerzo(){ return szerzo; public String getcim(){ return cim;
DAT Bináris fájlba írás import java.io.*; public class DatWriter { public static void main (String args[]) { Konyv[] k = new Konyv[2]; k[0] = new Konyv("Katerina Diamond", "A titok"); k[1] = new Konyv("Caleb Carr", "A halál angyala"); 77/20 try { FileOutputStream fos = new FileOutputStream("konyv.dat"); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeint(k.length); for (int i = 0; i < k.length; i++) oos.writeobject(k[i]); fos.close(); System.out.println("Adatok kiírva!"); catch (IOException ioe) {System.out.println(ioe.getMessage());
DAT Olvasás bináris fájlból import java.io.*; public class DatReader { public static void main (String args[]) { int db=0; Konyv adat; try { FileInputStream fistr = new FileInputStream("konyv.dat"); ObjectInputStream ois = new ObjectInputStream(fistr); db = ois.readint(); Object o = null; for (int i = 0; i < db; i++) { o = ois.readobject(); System.out.pradat = (Konyv)o; intln(adat.getszerzo()+": "+adat.getcim()); fistr.close(); System.out.println("Adatok beolvasva!"); catch (ClassNotFoundException cnfe) {System.out.println(cnfe.getMessage()); catch (IOException ioe) {System.out.println(ioe.getMessage()); 77/21
77/22
CSV Strukturált szöveges fájl Az egyes adatokat a fájlban valamilyen határoló karakter választja el, általában vessző, pontosvessző vagy tabulátor Gyakran alkalmazzák ezt a formátumot az adatbázis-kezelők és a táblázatkezelők A fájl egy sora egy rekordot, vagy egy munkafüzet-sort jelent Ha munkafüzet adatok kerülnek bele, akkor a vessző általában tizedes vesszőt jelent, ilyenkor határolóként alkalmazzunk pontosvesszőt A fájlok legelső sora általában tartalmazza az értelmezést segítő mezőneveket Szerző;Cím Katerina Diamond;A titok Caleb Carr;A halál angyala 77/23
CSV Fájlba írás import java.io.*; public class CsvWriter { public static void main (String args[]) { Konyv[] k = new Konyv[2]; k[0] = new Konyv("Katerina Diamond", "A titok"); k[1] = new Konyv("Caleb Carr", "A halál angyala"); try { PrintStream out = new PrintStream(new FileOutputStream("konyv.csv")); out.println("szerző;cím"); for (int i=0; i < k.length; i++) out.println(k[i].getszerzo()+";"+k[i].getcim()); out.close(); System.out.println("Adatok kiírva!"); catch (IOException ioe) {System.out.println(ioe.getMessage()); 77/24
import java.io.*; public class CsvReader { public static void main (String args[]) { try { FileInputStream f=new FileInputStream("konyv.csv"); LineNumberReader in = new LineNumberReader(new InputStreamReader(f)); String separator=";"; String s=in.readline(); //== fejléc: oszlopok nevei s=in.readline(); while(s!=null) { int index=s.indexof(separator); String szerzo = s.substring(0, index); String cim=s.substring(index+1, s.length()); System.out.println(szerzo+": "+cim); s=in.readline(); in.close(); System.out.println("Adatok beolvasva!"); catch (IOException ioe){system.out.println(ioe.getmessage()); 77/25 CSV Olvasás fájlból
77/26
JSON JavaScript Object Notation Kis méretű, szöveg alapú szabvány, ember által olvasható adatcserére. A JavaScript szkriptnyelvből alakult ki, egyszerű adatstruktúrák és asszociatív tömbök reprezentálására (a JSON-ban objektum a nevük). A JSON-t legtöbbször egy szerver és egy kliens számítógép közti adatátvitelre használják az XML egyik alternatívájaként. Általánosságban strukturált adatok tárolására, továbbítására szolgál. 77/27
JSON JavaScript Object Notation Felépítése: Az adatok kulcs : érték párosokként szerepelnek Az értékpárosokat vesszők, választják el egymástól A listák kapcsos zárójelek { közé kerülnek A tömbök határoló karaktere a szögletes zárójel [ ] Használható adattípusok: szám idézőjelek nélkül: 25.652 karakterlánc idézőjelek között: "szöveg" logikai típus true vagy false érték null üres érték leírására 77/28
JSON JavaScript Object Notation Felépítése: { "konyvek": { "konyv": [ { "szerzo": "Brian W. Aldiss", "cim": "Amíg világ a világ", { "szerzo": "Robert I. Sutton", "cim": "Kis seggfejkalauz" ] 77/29
{ JSON XML "konyvek": { "konyv": [ { ] 77/30 "szerzo": "Brian W. Aldiss", "cim": "Amíg világ a világ", { "szerzo": "Robert I. Sutton", "cim": "Kis seggfejkalauz" <konyvek> <konyv> <szerzo>brian W. Aldiss</szerzo> <cim>amíg világ a világ</cim> </konyv> <konyv> <szerzo>robert I. Sutton</szerzo> <cim>kis seggfejkalauz</cim> </konyv> </konyvek
JSON készítés Java nyelven A json API a Java 7 EE része, de nincs benne az SE kiadásban. Ezért töltsük le az org.json csomagot, és telepítsük Letöltés: http://www.java2s.com/code/jar/o/downloadorgjsonjar.htm Telepítés: Csomagoljuk ki a fájlt a Java munkakönyvárba A meglévő ini.bat fájlunkban fűzzük hozzá a csomag nevét a keresési útvonalhoz: 77/31
JSON készítés Java nyelven Ha elkészítjük az org.json csomaggal a json adatsort, az adatok ugyan helyesek lesznek, de nem kellemesen olvasható formátumban kapjuk meg azokat: Az emberi szem számára könnyen olvasható formátum előállítására egy újabb külső csomag használható, a googlegson. Letöltése: https://repo1.maven.org/maven2/com/google/code/gson/gson/2.8.2/ 77/32
JSON készítés Java nyelven Előkészítése: Csomagoljuk ki a fájlt a Java munkakönyvárba A meglévő ini.bat fájlunkban fűzzük hozzá a csomag nevét a keresési útvonalhoz: 77/33
JSON Fájlba írás import java.io.*; import org.json.*; import com.google.gson.*; import java.util.stringtokenizer; public class JsonWriter { public static void main(string[] args) { Konyv[] k = new Konyv[2]; k[0] = new Konyv("Brian W. Aldiss", "Amíg világ a világ"); k[1] = new Konyv("Robert I. Sutton", "Kis seggfejkalauz"); 1. rész: előkészületek. A k tömb tartalmát fogjuk fájlba írni. 77/34
JSON Fájlba írás 77/35 JSONObject jrootobj = new JSONObject(); JSONObject obj = new JSONObject(); JSONArray jarray = new JSONArray(); try { for (int i = 0; i < k.length; i++) { JSONObject jo = new JSONObject(); jo.put("szerzo", k[i].getszerzo()); jo.put("cim", k[i].getcim()); jarray.put(i, jo); obj.put("konyv", jarray); jrootobj.put("konyvek", obj); System.out.println("Adatok feldolgozva!"); catch (Exception e) {System.out.println(e.getMessage()); 2. rész: a json adatok előállítása. JSONObject: tetszőleges json név-érték párost tartalmazó konténer JSONArray: sorszámozott, azonos jellegű név-érték párost tartalmazó konténer put(): adatpáros, vagy objektum berakása egy konténerbe
JSON Fájlba írás try { Gson gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(jrootobj.tostring()); String prettyjs = gson.tojson(je); PrintStream out = new PrintStream(new FileOutputStream("konyv.json")); String[] arrsplit = prettyjs.split("\n"); for(string x : arrsplit) out.println(x); out.close(); System.out.println("Adatok kiírva!"); catch (Exception e) {System.out.println(e.getMessage()); 3. rész: formázás, kiírás. A kiíráskor elveszik a gson formátum, ezért a sortöréseknél részekre bontjuk a stringet, és a részeket egyesével, a println() metódussal írjuk ki. 77/36
JSON a kiírt fájl tartalma 77/37
JSON Olvasás fájlból import java.io.*; import org.json.*; public class JsonReader { public static void main(string[] args) { StringBuilder jsondata = new StringBuilder(); try { FileInputStream f=new FileInputStream("konyv.json"); LineNumberReader in = new LineNumberReader(new InputStreamReader(f)); String inputline; while ((inputline = in.readline())!= null) jsondata.append(inputline); in.close(); catch (IOException e) {System.out.println(e.getMessage()); System.out.println("Adatok beolvasva!"); 1. rész: adatok beolvasása fájlból, és összefűzésük egyetlen stringbe. 77/38
JSON Olvasás fájlból try { JSONObject jrootobj = new JSONObject(jsonData.toString()); JSONObject jobj = jrootobj.getjsonobject("konyvek"); JSONArray jarr = jobj.getjsonarray("konyv"); for (int i = 0; i < jarr.length(); ++i) { JSONObject rec = jarr.getjsonobject(i); String szerzo = rec.getstring("szerzo"); String cim = rec.getstring("cim"); System.out.println("Adat: "+szerzo+": "+cim); System.out.println("Adatok feldolgozva!"); catch (Exception e) {System.out.println(e.getMessage()); 2. rész: a string konvertálása json konténerré, az adatok kinyerése a konténer(ek)ből getxxx() metódusokkal. 77/39
77/40
Fájl beolvasása a webről A java.net.url egy olyan osztály, amely egy weben elérhető erőforrásra mutat. Az erőforrás lehet egy fájl, egy mappa, egy adatbázis vagy egy keresőmotor objektum Létrehozása: new URL(String); A String egy teljes, szöveges erőforrás azonosító Pl: "http://www.example.com/docs/resource1.html" 77/41
Fájl beolvasása a webről A java.net.urlconnection osztály az alkalmazás és az URL közötti kapcsolatot reprezentálja. A kapcsolatot az openconnection() metódussal lehet megnyitni. A kapcsolat egy olyan csatorna, mely használható az erőforrás olvasására és írására is. URL url = new URL("http://www..."); URLConnection conn = url.openconnection(); BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream())); 77/42
Fájl beolvasása a webről import java.io.*; import java.net.*; public class NetReader { public static void main(string[] args) { String url = "http://users.iit.uni-miskolc.hu/~szucs/data.txt"; StringBuilder response = null; try { URL website = new URL(url); URLConnection conn = website.openconnection(); BufferedReader in = new BufferedReader( new InputStreamReader(conn.getInputStream())); response = new StringBuilder(); String inputline; while ((inputline = in.readline())!= null) response.append(inputline+"\n"); in.close(); System.out.println(response.toString()); System.out.println("Data is readed!"); catch (IOException e) {System.out.println(e.getMessage()); 77/43
77/44
PDF fájl készítése Pdf készítésre alkalmas csomag nincs a Javaban, ezért töltsük le a com.itextpdf csomagot: Letöltés: http://www.java2s.com/code/jar/i/downloaditextpdf541jar.htm Telepítés: Csomagoljuk ki a fájlt a Java munkakönyvárba A meglévő ini.bat fájlunkban fűzzük hozzá a csomag nevét a keresési útvonalhoz (ügyelve a verziószámra!): 77/45
PDF fájl készítése a com.itextpdf csomaggal 1. Létre kell hozni egy Documentum példányt, ez lesz maga a pdf dokumentum: 2. Létre kell hozni egy PdfWriter-t, ez fogja a dokumentumot fájlba írni: 3. Meg kell nyitni a dokumentumot: 4. Létre kell hozni egy Paragraph-ot, bekezdést, megadható a tartalma és a betűtípusa: 77/46 Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(fname)); document.open(); Paragraph par = new Paragraph ("Lista a könyvekről", fnt); 5. Hozzá kell adni a bekezdést a dokumentumhoz: document.add(par);
PDF fájl készítése a com.itextpdf csomaggal 6. A kész dokumentum a close() metódus meghívásával kerül lezárásra, és ekkor a teljes tartalma átmásolódik a PdfWriterre, azaz kiíródik a fájlba: Fontkészlet BaseFont beállítása: segítségével lehet kialakítani a betűtípust, a megfelelő karakterkészletet, és a fontkészletet beágyazni a dokumentumba: 77/47 document.close(); BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.EMBEDDED); Betűtípusok: HELVETICA, COURIER, TIMES_ROMAN Betűtípus Font beállítása: a fontkészletből készül, megadható a méret, és a stílus: Font fnt = new Font(bf, 14); Font fnt = new Font(bf, 12, Font.BOLD);//Font.ITALIC, Font.UNDERLINE
PDF fájl készítése a com.itextpdf csomaggal Ha kész a dokumentum, érdemes egy üzenet (és egy gombnyomás) erejéig megállítani a programot, hogy a dokumentum háttértárra írására legyen elég idő, ezután megnyithatjuk a dokumentumot az alapértelmezett kezelőprogrammal: public static void Message(String mes){ Console console = System.console(); System.out.println(mes); System.out.print("Press any key!"); String answer = console.readline(); try { File fpdf = new File(fname); Desktop.getDesktop().open(fpdf); catch (IOException exx ) { System.out.println(exx.getMessage()); 77/48
PDF fájl készítése a com.itextpdf csomaggal import com.itextpdf.text.*; import com.itextpdf.text.pdf.*; import com.itextpdf.text.font.*; import java.io.*; import java.awt.desktop; public class PdfM1 { public static void main(string[] args) { String fname = "konyv.pdf"; try { BaseFont bf = BaseFont.createFont(BaseFont.HELVETICA, BaseFont.CP1250, BaseFont.EMBEDDED); Font fnt = new Font(bf, 16, Font.BOLD); Document document = new Document(); PdfWriter.getInstance(document, new FileOutputStream(fname)); document.open(); 77/49
PDF fájl készítése a com.itextpdf csomaggal Paragraph par = new Paragraph ("Lista a könyvekről", fnt); document.add(par); document.close(); Message("The document has been completed, name is: "+fname); catch (DocumentException de) { System.out.println("PdfMaker: "+de.getmessage()); catch (IOException ex) { System.out.println("PdfMaker: "+ex.getmessage()); try { File fpdf = new File(fname); Desktop.getDesktop().open(fpdf); catch (IOException exx ) { System.out.println(exx.getMessage()); //== end of main 77/50
PDF fájl készítése a com.itextpdf csomaggal public static void Message(String mes){ Console console = System.console(); System.out.println(mes); System.out.print("Press any key!"); String answer = console.readline(); 77/51
PDF fájl készítése a com.itextpdf csomaggal Táblázat kialakítása: 1. Létre kell hozni egy PdfPTable példányt, ez lesz maga a pdf táblázat. Paramétere lehet az oszlopok száma, vagy az oszlopok szélessége (egymáshoz viszonyított számokkal megadva): PdfPTable table = new PdfPTable(3); //oszlopok száma float[] widths = {4, 5; PdfPTable table = new PdfPTable(widths); //oszlopok szélessége 2. Adjuk meg a táblázat szélességét (az oldalszélesség százalékában): table.setwidthpercentage(60); 3. Hozzunk létre egy PdfPCell-t, és adjuk meg a cella tartalmát: PdfPCell c = new PdfPCell(new Paragraph("szöveg", font)); 77/52
PDF fájl készítése a com.itextpdf csomaggal Táblázat kialakítása: 4. Adjuk hozzá a cellát a táblázathoz: 5. Ismételjük a cella létrehozását, és táblázathoz adását a teljes táblázat tartalomra. A cellák balról jobbra, majd fentről lefelé haladva adódnak a táblázathoz, az oszlopok számának megfelelően. 77/53 table.addcell(c); 6. Állítsuk be a táblázat vízszintes elhelyezkedését: table.sethorizontalalignment(element.align_left); 7. Adjuk hozzá a kész táblázatot a dokumentumhot: document.add(table); 1 2 3 4 5 6 7 8 9
PDF fájl készítése a com.itextpdf csomaggal float[] widths = {4, 5; PdfPTable table = new PdfPTable(widths); table.setwidthpercentage(52); Font f1 = new Font(bf, 14, Font.BOLD); Font f2 = new Font(bf, 14); PdfPCell c = new PdfPCell(new Paragraph("Szerző", f1)); table.addcell(c); c = new PdfPCell(new Paragraph("Cím", f1)); table.addcell(c); c = new PdfPCell(new Paragraph("Katerina Diamond", f2)); table.addcell(c); c = new PdfPCell(new Paragraph("A titok", f2)); table.addcell(c); c = new PdfPCell(new Paragraph("Caleb Carr", f2)); table.addcell(c); c = new PdfPCell(new Paragraph("A halál angyala", f2)); table.addcell(c); table.sethorizontalalignment(element.align_left); document.add(table); 77/54
77/55
ZIP fájl készítése A java.util.zip csomag tartalmazza a zip és gzip állományok kezelésére szolgáló osztályokat. ZipOutputStream: szűrő osztály, mely a bemenetére érkező adatokat zip formátumúra alakítja. ZipInputStream: szűrő osztály, mely a bemenetére érkező zip formátumú adatokat normál adattá alakítja. ZipEntry: egy zip formátumú fájlt jelképez. A ZipOutputStream-hez a putnextentry() metódussal adható hozzá egy zip formátumú fájl A ZipInputStream-ből a getnextentry() metódussal kérhető el egy zip formátumú fájl 77/56
import java.io.*; import java.util.zip.*; public class ZipMaker { public static void main (String args[]) { byte[] buffer = new byte[1024]; try{ FileOutputStream fos = new FileOutputStream("ZipFile.zip"); ZipOutputStream zos = new ZipOutputStream(fos); ZipEntry ze= new ZipEntry("zipalap.txt"); zos.putnextentry(ze); FileInputStream in = new FileInputStream("zipalap.txt"); 77/57 ZIP fájl becsomagolás int len; while ((len = in.read(buffer)) > 0) { zos.write(buffer, 0, len); in.close(); zos.closeentry(); zos.close(); System.out.println("Done"); catch(ioexception ex) {ex.printstacktrace();
ZIP fájl kicsomagolás import java.io.*; import java.util.zip.*; public class ZipReader { public static void main (String args[]) { byte[] buffer = new byte[1024]; try{ ZipInputStream zis = new ZipInputStream( new FileInputStream("ZipFile.zip")); ZipEntry ze = zis.getnextentry(); while(ze!=null){ String filename = ze.getname(); File newfile = new File(fileName); FileOutputStream fos = new FileOutputStream(newFile); int len; while ((len = zis.read(buffer)) > 0) { fos.write(buffer, 0, len); fos.close(); ze = zis.getnextentry(); zis.closeentry(); zis.close(); System.out.println("Done"); catch(ioexception ex) {ex.printstacktrace(); 77/58
77/59
JAR fájl készítése A JAR fájl olyan ZIP fájlformátumú fájl, amely java osztályokat és hozzájuk tartozó metaadatokat tartalmaz. JAR fájlokat készíteni a JDK részét képező jar eszközzel lehet. A JAR fájl tartalmazhat egy úgynevezett manifest fájlt a META-INF könyvtárban MANIFEST.MF néven. Ez a fájl írja le a futtató környezet számára, hogy hogyan kell a jar fájlt használni. 77/60
JAR fájl készítése Készítsünk egy emp.mft nevű szöveges fájlt, az alábbi tartalommal: 77/61 Manifest-Version: a csomagolt fájl verziószáma Main-Class: a fájl futtatásakor melyik osztály main metódusát kell elindítani Class-path: a program futásakor használatos elérési útvonal a csomagolt fájlon belül Itt kell megadni az esetleges fájlként a JAR fájlba becsomagolt külső csomagokat További bejegyzések lehetségesek, de ezek elegendőek egy futtatható JAR előállításához
JAR fájl készítése Az emp.mft fájl tartalma másolódik be a JAR fájlba a META- INF könyvtárba, MANIFEST.MF néven. A JAR fájlban szeretnénk elhelyezni a következő fájlokat: az összes olyan class fájlt, mely Emp-pel kezdődik: Emp*.class FileManager.class CH.class az adatbázis drivert: sqlite-jdbc-3.21.0.jar a pdf drivert: itext-5-4-0-.jar A tartalomnak megfelelő kiadandó parancs: jar cvfm0 Emp.jar emp.mft Emp*.class FileManager.class CH.class sqlite-jdbc-3.21.0.jar itextpdf-5.4.0.jar 77/62
JAR fájl készítése jar cvfm0 Emp.jar emp.mft Emp*.class FileManager.class CH.class sqlite-jdbc-3.21.0.jar itextpdf-5.4.0.jar A jar parancs paraméterei: c készítsen új archívumot v a végzett műveletek részletes kiírása a konzolra f archívum nevének megadása m a megadott manifest tartalom hozzáadása az archívumhoz 0 csak tárolás, ne tömörítse az archívumot A paraméterek után jönnek szigorú sorrendben az adatok: 1. archívum neve 2. manifest fájl neve 3. az archívumba kerülő adatok (ezeknél a sorrend tetszőleges) 77/63
JAR fájl készítése 77/64
77/65
Teszt 1. Alakítson ki két kategóriát, és sorolja a két kategóriába az alábbi fájl kiterjesztéseket!.dat.csv.pdf.xml.json.zip.jar.java.class Kategóri neve: Tartalma: 1. 2. 77/66
Teszt 2. Mi a DOM? Document Object Model Development Object Markup Detected Object Matrix Development Of Methods Document Oriented Model 77/67
Teszt 3. Mi az XML? extensible Markup Language Example Markup Language X-Markup Language extra Modern Link 77/68
Teszt 4. Hogyan kell megadni az xml fájlban a verziószámot? <?xml version="1.0" /> <?xml version="1.0"?> <xml version="1.0" /> <?xml version=1.0> 77/69
Teszt 5. Hogyan készítjük el az xml fájl gyökérelemét? RootElement root = dom.createelement("adatok"); Element root = dom.createroot("adatok"); Element root = dom.createelement("adatok"); RootElement root = dom.createrootelement("adatok"); 77/70
Teszt 6. Melyik metódussal írunk ki fájlba egy saját kialakítású osztályt? fos.write(o); fos.writeln(o); fos.writeobject(o); fos.println(o); 77/71
Teszt 7. Melyik az a fájltípus, amelyben az adatok kulcs : érték párosok alakjában szerepelnek?.xml.dat.csv.json Bármilyen fájlban szerepelhetnek így az adatok 77/72
Teszt 8. Az org.json csomagot használva, a Java kódban hogyan nevezik az adatot tartalmazó objektumot? JSONObject Element Node jsondata jsonentry 77/73
Teszt 9. Igaz vagy hamis az állítás? Nincs zip fájl készítésére alkalmas csomag a Javaban. Az állítás igaz Az állítás hamis Az állítás részben igaz, a csomag része a Java 7 EEnek része, de nincs benne az SE kiadásban. 77/74
Teszt 10. Mi a manifest.mf fájl szerepe? XML fájl készítésekor ide kerülnek a DOM információk Ez tartalmazza a ZIP csomagban lévő fájlok listáját JAR fájlban ide kerülnek a használat információi JSON fájloknál a helyes (olvasható) előállításhoz szükséges PDF fájlokban itt adhatók meg a környezeti információk 77/75
77/76
VÉGE VÉGE 77/77