210 likes | 317 Views
DataOutputStream ja DataInputStream. DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon DataInputStream:lla voidaan lukea DataOutputStream:lla tallennettua binääritiedostoa
E N D
DataOutputStream ja DataInputStream • DataOutputStream:lla voidaan tallentaa perustietotyyppien arvoja binäärimuotoiseen tiedostoon • DataInputStream:lla voidaan lukea DataOutputStream:lla tallennettua binääritiedostoa • Java ei tarkasta luettavan tiedon järkevyyttä, joten käyttäjän on tiedettävä tarkasti mitä tietotyyppejä ja missä järjestyksessä tiedostoon on tallennettu
DataOutputStream - tallennus try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); DataOutputStream dataStream = new DataOutputStream( outStream); dataStream.writeInt( 2 ); dataStream.writeBoolean( false ); dataStream.writeDouble( 9.8 ); dataStream.flush(); dataStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
DataInputStream - luku try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); DataInputStream dataStream = new DataInputStream( inStream); int i = dataStream.readInt(); boolean b = dataStream.readBoolean(); double d = dataStream.readDouble(); System.out.println("Luettu:\n" + "int i == " + i + "\n” + "boolean b == " + b + "\n" + "double d == " + d); dataStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
PrintWriter ja BufferedReader • PrintWriter-luokalla voidaan tallentaa tekstiä tietovirtaa apunakäyttäen tekstitiedostoon • Tekstitiedostoa voidaan lukea tietovirrasta BufferedReader-luokalla
Tekstitiedoton tallentaminen - PrintWriter try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); PrintWriter printWriter = new PrintWriter(outStream); printWriter.println("Tässä yksi rivi."); printWriter.print("Tässä rivi ilman rivinvaihtoa."); printWriter.println("Tässä rivinvaihdon kanssa."); printWriter.flush(); printWriter.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Tekstitiedoton lukeminen - BufferedReader try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); InputStreamReader isReader = new InputStreamReader(inStream); BufferedReader buffReader = new BufferedReader(isReader); String readedLine; int lineNum = 0; while ((readedLine = buffReader.readLine()) != null) { System.out.println("Rivi " + (++lineNum) + ":" + readedLine); } buffReader.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Olioiden tallentaminen • Java osaa tallentaa olion tilan binäärimuodossa ObjectOutputStream-luokan avulla • Mikä tahansa omatekoisen luokan olio voidaan tallentaa, kun se toteuttaa (implements) Serializable-rajapinnan (interface):public class MyClass implements Serializable { ... }
Olioiden tallentaminen – Student.java import java.io.*; public class Student implements Serializable { private int m_studentNumber; private String m_name; public Student(int studentNumber, String name) { m_studentNumber = studentNumber; m_name = name; } public String toString() { return "Student:\n Number: " + m_studentNumber + "\n" + " Name: " + m_name; } }
Olioiden tallentaminen – ObjectOutputStream try { File file = new File(fileName); FileOutputStream outStream = new FileOutputStream(file); ObjectOutputStream objStream = new ObjectOutputStream(outStream); objStream.writeObject(new Student(11, "Matti")); objStream.writeObject(new Student(34, "Tuukka")); objStream.writeObject(new Student(99, "Teppo")); objStream.flush(); objStream.close(); } catch (IOException e) { System.out.println("ERROR: " + e); }
Olioiden lukeminen – ObjectInputStream try { File file = new File(fileName); FileInputStream inStream = new FileInputStream(file); ObjectInputStream objInput = new ObjectInputStream(inStream); Student student1 = (Student) objInput.readObject(); Student student2 = (Student) objInput.readObject(); Student student3 = (Student) objInput.readObject(); System.out.println("1:" + student1 + "\n" + "2:" + student2 + "\n" + "3:" + student3); objInput.close(); } catch (IOException e) { System.out.println("ERROR: " + e); } catch (ClassNotFoundException e) { System.out.println("ClassNotFnd: " + e); }
Työskentely ilman BlueJ-ympäristöä main-metodin käyttö suoritus komentoriviltä parametrien antaminen
main-metodi • Mikäli Java-ohjelmia halutaan suorittaa komentoriviltä, tulee ajettavaan lähdekooditiedostoon luoda main-metodi: • main-metodissa luodaan tarvittava(t) olio(t) • Komentoriviparametrit tulevat main-metodin parametrina olevaan taulukkoon public static void main(String[] args) { // Käytettävien olioiden luonti }
main-metodi - esimerkki public class TestApp { public TestApp(String name) { System.out.println("Hello " + name + "!"); } public static void main(String[] args) { if (args.length==0) System.out.println("Usage:\njava TestApp text"); else { TestApp newApp = new TestApp(args[0]); } } }
Koodin kääntäminen komentoriviltä • Ennen kääntämistä ja ohjelman suorittamista tulee tarkastaa että CLASSPATH-ympäristömuuttujassa on määritettynä sopiva luokkien hakupolku • CLASSPATH-muuttujaan tulee lisätä aLibrary:n polku, jos käytetään aLibrary-kirjastoa • Windowsissa:set – näyttää nykyiset ympäristömuuttujatset CLASSPATH=”.;c:\java2002;c:\bluej\lib” – asettaa uuden
Koodin kääntäminen ja ajaminen • Yksittäisen MyClass.java-tiedoston kääntäminen onnistuu:javac MyClass.java • Käännöksen jälkeen ajaminen:java MyClass • Ajamisen yhteydessä voidaan välittää komentoriviparametreja:java MyClass parametri1 parameteri2 ...
JavaDoc ohjelmakoodin dokumentoinnin apuväline
JavaDoc • Ohjelmakoodiin voi sijoittaa kommentteja, joista JavaDoc osaa tehdä html-muotoisen dokumentaation • Dokumentaatio on ulkoasultaan ja toiminnallisuudeltaan samanlainen kuin Javan oman API:n dokumentaatio • Kommenteissa pitää käyttää ns. tageja joita JavaDoc ymmärtää
JavaDoc • Kommentti sijoitetaan ennen luokkaa, metodia tai attribuuttia:/** * Tämä luokka arpoo lottorivin */ • Kommentin sisällä voi olla @-merkillä alkavia tageja
JavaDoc-tagit • @author Tekijä • @version Versionumero • @param parametrin_nimi Kuvaus • @return Kuvaus paluuarvosta Kommenteissa voi käyttää halutessaan HTML-koodia.
JavaDoc -käyttö • HTML-dokumentaatio saadaan komennollajavadoc lähdetiedosto.java • JavaDoc:ia voi pyytää tekemään myös useasta tiedostosta dokumentaation:javadoc *.java • Komentoriviparametreilla voidaan vaikuttaa dokumentaation tyyliin • -private komentoriviparametri dokumentoi myös private ja protected-näkyvyysalueilla esitellyt metodit ja attribuutit
JavaDoc - esimerkki /** * Malliluokka, jossa esitellään JavaDoc:n toimintaa * @version 1.0 * @author Matti Meikäläinen */ public class TestApp { /** * Malli luokkamuuttujasta */ private int m_memberVariable; /** * Mallimetodi * @param name Otettava parametri * @return Merkkijono jonka metodi palauttaa public String pestMethod(String name) { /* … */ } }