Java Programozás 10. Ea: Extrák

Hasonló dokumentumok
Java Programozás 6. Gy: Java alapok. Adatkezelő 2.rész

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Osztályszintű elérés, kivételkezelés, fájlkezelés

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Java Programozás 1. Gy: Java alapok. Ismétlés ++

XML adatkezelés. A DOM alapú adatkezelés. Dr. Kovács László Répási Tibor kiegészítéseivel

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Java Programozás 7. Gy: Java alapok. Adatkezelő 3.rész

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Java Programozás 11. Ea: MVC modell

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Szathmáry László Debreceni Egyetem Informatikai Kar

Abstract osztályok és interface-ek. 7-dik gyakorlat

Programozási technológia

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Szoftvertechnológia alapjai Java előadások

3. Határozza meg és írja ki a minta szerint, hogy a forrásállományban hány kémiai elem felfedezési adatai

Az új be- és kimenet könyvtár

Segédanyag: Java alkalmazások gyakorlat

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

OOP: Java 8.Gy: Gyakorlás

Java gyakorlat feladatai e s megolda sai ( )

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Java és web programozás

Kivételkezelés, naplózás. Exception handling, logging

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

7. K: JAVA alapok Konzultáció

3. modul - Szövegszerkesztés

Informatika terméktervezőknek

Dokumentumformátumok Jelölő nyelvek XML XML. Sass Bálint Bevezetés a nyelvtechnológiába 2. gyakorlat szeptember 20.

INFORMATIKAI ALAPISMERETEK

Programozási nyelvek Java

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

BME MOGI Gépészeti informatika 4.

OOP: Java 4.Gy: Java osztályok

OOP: Java 8.Gy: Abstract osztályok, interfészek

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar

ANDROID ALKALMAZÁSFEJLESZTÉS

Java Programozás 9. Gy: Java alapok. Adatkezelő 5.rész

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

Programozási nyelvek II.: JAVA

JavaServer Pages (JSP) (folytatás)

Pénzügyi algoritmusok

Bánsághi Anna

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Programozási nyelvek Java

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Objektumorientált programozás C# nyelven

OOP és UML Áttekintés

4. Gy: JAVA osztályok

Bevezető. Servlet alapgondolatok

Java és web programozás

Bevezetés Működési elv AJAX keretrendszerek AJAX

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

OOP: Java 1.Gy: Java alapok

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

Java és web programozás

Példaprogramok Android alá (Lista, mentés, visszatöltés, pattogó android figura) Android alapok. Android játékfejlesztés.

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

JAVA webes alkalmazások

abkezel.java import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.sql.*; public class abkezel extends JFrame {

Tájékoztató. Használható segédeszköz: -

Programozási technológia

Torna. A torna.csv UTF-8 kódolású állományban soronként egy versenyző eredményeit tároljuk. Az adatokat pontosvessző választja el egymástól.

Segédanyag: Java alkalmazások gyakorlat

BME MOGI Gépészeti informatika 8.

és az instanceof operátor

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Objektum Orientált Programozás. 5. JAVA osztályok 21/1B IT MAN

XML / CSV specifikáció

Stateless Session Bean

Intelligens közlekedési rendszerek (ITS)

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Szöveges fájl kezelése (a Caesar-kód feltörése) A kód feltörésének statisztikai háttere

A WEB programozása - JSP1 dr.gál Tibor őszi félév

JAVA SE/ME tanfolyam tematika

XML / CSV specifikáció

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

INFORMATIKAI ALAPISMERETEK

Programozási nyelvek Java

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

Kommunikáció Androidon Mobilinternet Wifi

Java programozási nyelv

Technikai információk fejlesztőknek

BME MOGI Gépészeti informatika 13.

Szoftvertechnolo gia gyakorlat

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

Felhasználói leírás a DimNAV Server segédprogramhoz ( )

Java XML kezelés labor

Tájékoztató. Használható segédeszköz: -

Sikeres végrehajtás(pass): ez azt jelenti, hogy a teszt rendben lefutott, és az ellenőrzési feltételek mind teljesültek.

Programozási nyelvek II. JAVA

Átírás:

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