Toon posts:

lijsten opslaan

Pagina: 1
Acties:

Verwijderd

Topicstarter
Kan men met één of andere javamethode een gemaakte lijst opslaan op de HD, want dat zou wel zeeeeeeeer handig kunnen zijn. Maar ik dacht dat Java dat niet kon, omdat java m.b.t. internet-security geen dos-functies kon uitvoeren of zoiets.

Het progie moet wel niet dienen om als applet op het net te gebruiken, want als ge van iets een applet wil maken heeft dat soms beperkingen merkte ik al.

  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Zoek op serializable.

Als je ervoor zorgt dat jou lijst serializable is, dan kun je het hele geval middels een object stream weg schrijven (netwerk connectie, file, etc.).

Je zou je applet/applicatie zo kunnen schrijven dat ie als applet gedraaid geen save feature heeft maar als app wel. Je kan namelijk checken of je als applet draait of niet.

Of je zou ervoor kunnen kiezen dat wanneer het programma als applet gedraaid wordt, dat het dan opgeslagen wordt op de server. (middels de object stream)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: Kan men met één of andere javamethode een gemaakte lijst opslaan op de HD, want dat zou wel zeeeeeeeer handig kunnen zijn.
Ik neem aan dat je op verzamelingen doelt als Vector, List, ArrayList?

Ja dat kan. Via verschillende manieren:

1. Maak de objecten in de lijst Serializable. Daarna kan je ze gewoon opslaan via het serializatie systeem. Bekijk daarvoor eens dit: http://java.sun.com/docs/books/tutorial/essential/io/serialization.html

2. Via XML serializatie van Java Beans. Alle Java Beans kan je naar XML serializeren met de klassen java.beans.XMLEncoder en XMLDecoder. In de API documentatie staat uitgelegd hoe dit werkt.
Maar ik dacht dat Java dat niet kon, omdat java m.b.t. internet-security geen dos-functies kon uitvoeren of zoiets.
Wat heeft dit dan met dos-functies te maken :? , Java code kan op veel verschillende manieren gedraaid worden. Als je het als een Applet of Java Web Start draait zijn er inderdaad wat beperkingen ivm de security... Ik begrijp echter dat jij geen applets gebruikt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
<quote>
Wat heeft dit dan met dos-functies te maken , Java code kan op veel verschillende manieren gedraaid worden. Als je het als een Applet of Java Web Start draait zijn er inderdaad wat beperkingen ivm de security... Ik begrijp echter dat jij geen applets gebruikt.
<\quote>
Ja dat weet ik, maar ik had geleze dat als je je java gebruikt als applet dat je dan niet iemands HD kunt wissen, of er iets naartoe kan kopiëren enzo,...

Ik bedoel idd de verzameling Vector, bedankt voor de tutorial!!!!!!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: <quote>
Je moet met de vierkante haakjes werken: [ quote] ... [ /quote] ;) .
Ja dat weet ik, maar ik had geleze dat als je je java gebruikt als applet dat je dan niet iemands HD kunt wissen, of er iets naartoe kan kopiëren enzo,...
Dat klopt inderdaad wel, je kan verschillende zaken niet als je een Applet gebruikt, tenzij je de jars signeert en de gebruikers toestemt in het gebruik van de gevaarlijke functionaliteit. Voor een overzichtje kan je hier kijken:

http://java.sun.com/docs/books/tutorial/applet/practical/security.html

Sowieso wel handig om deze link even te bewaren:

http://java.sun.com/docs/books/tutorial/

De Really Big Index is erg makkelijk:

http://java.sun.com/docs/books/tutorial/reallybigindex.html
Ik bedoel idd de verzameling Vector, bedankt voor de tutorial!!!!!!
Succes dermee :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Stel ik heb een Vector aangemaakt dus ik heb b.v.:
Vector nuttigeLijst = new Vector();
Kan ik deze dan opslaan m.b.h.v. het volgende:
try{
FileOutputStream hardeSchijf = new FileOutputStream("lijstOpgeslaan.obj");
ObjectOutputStream oo = new ObjectOutputStream(hardeSchijf);
oo.writeObject(nuttigeLijst);
oo.close();
}
Of moet ik ieder elmentje van de lijst afzonderlijk opslaan

en kan ik dat dan weer oproepen met:

try{
FileInputStream hardeSchijfOphalen = new FileInputStream("lijstOpgeslaan.obj");
ObjectInputStream lijst = new ObjectInputStream(hardeSchijf);
}

Of gaat dat niet een volledige lijst en moet ik ieder object van die lijst afzonderlijk doen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: Of gaat dat niet een volledige lijst en moet ik ieder object van die lijst afzonderlijk doen.
Nee, je kan de hele Vector gewoon in 1 keer opslaan, zolang de elementen in de vector maar Serializable zijn :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
En dat doe ik zo:
FileOutputStream out = new FileOutputStream("Titels");
ObjectOutputStream s = new ObjectOutputStream(out);
s.writeObject(hierEenString);
s.writeObject(nogEenString);
s.flush();

waarna ik hierEenString en nogEenString in de lijst steek, waarna ik deze kan opslaan volgens eerder gezette code, en de lijst terug kan oproepen volgens de code die ik ook eerder typte.

Is het zo, of zit ik er helemaal naast? Heb je soms een voorbeeldje, als mijn redenering niet klopt?

Thanks

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: waarna ik hierEenString en nogEenString in de lijst steek, waarna ik deze kan opslaan volgens eerder gezette code, en de lijst terug kan oproepen volgens de code die ik ook eerder typte.
Je denkt veel te moeilijk ;) . Je hoeft helemaal niet met de elementen van die lijst bezig te zijn. Je write gewoon de Vector naar de stream. De elementen worden dan automagisch opgeslagen. Je kan daarna de hele Vector weer in 1 keer inlezen.
Is het zo, of zit ik er helemaal naast? Heb je soms een voorbeeldje, als mijn redenering niet klopt?
Ik gebruik die serializatie nooit, dus heb helaas geen voorbeeld-code liggen. Maar ik denk dat het nu wel moet lukken met deze laatste info :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Hmmm, ik krijg nog steeds één compilatiefout, de bedoel is dat ik de lijsten auteur, titels en uitgeverij opsla, allé dat is niet de bedoeling maar ik wil dat ie dat doet, het is namelijk veel gemakkelijker want dan moet ik dat niet altijd hertypen, de bedoeling is dat ik dat dan later in een ander progie kan steken.

'k weet normaal gezien moet ik dat niet doen als opdracht, maar het kan nooit geen kwaad wat vooruit te doen dacht ik :)

Maar blijkbaar is dat toch niet zo easy als ik dacht.

Het progie werkt overigens correct zonder die drie "try's" of hoe moet ik et noemen.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Bronbestand : BoekenLijst.java
import java.io.*;
import javagently.*;    
import java.util.*; 

public class BoekenLijst {
    public static void main(String[] args) throws IOException {
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader in=new BufferedReader(isr);
        Vector auteursLijst = new Vector();
        Vector titelLijst = new Vector();
        Vector uitgeverijLijst = new Vector();

try{
FileOutputStream hardeSchijf = new FileOutputStream("lijstOpgeslaan.obj");
ObjectOutputStream oo = new ObjectOutputStream(hardeSchijf);
oo.writeObject(auteursLijst);
oo.close();
}catch (IOException ie){
    System.out.println("Error");
}
try{
FileInputStream hardeSchijf = new FileInputStream("lijstOpgeslaan.obj");
ObjectInputStream lijst = new ObjectInputStream(hardeSchijf);
Vector subLijstAuteur= (Vector)lijst.readObject();
subLijstAuteur = auteursLijst;
}catch (IOException ie){
    System.out.println("Error");
}       



        String auteur="";
        String titel="";
        String uitgeverij="";
        int positie=0;
        int positie2=0;

        System.out.println("Welkom op het boekie, hét programma om boekenlijsten te maken");
        char menuKeuze='?';
        do{
            System.out.println("*****MENU*****");
            System.out.println(" ");
            System.out.println("<T>oevoegen van een boek");
            System.out.println("<V>erwijderen van een boek");
            System.out.println("<Z>oeken van een boek");
            System.out.println("T<o>nen van de reeds ingevoerde boeken");
            System.out.println("<A>fsluiten");
            System.out.println(" ");
            Text.prompt("Geef je keuze in: ");
            menuKeuze = Text.readChar(in);
            System.out.println("**************************************************");
    
            switch(menuKeuze){
                case 'T':{
                    Text.prompt("Geef de titel van het boek in:");                              titel = in.readLine();
                    titelLijst.addElement(titel);
                    Text.prompt("Geef de naam van de auteur:");                             auteur = in.readLine();
                    auteursLijst.addElement(auteur);
                    Text.prompt("Geef de naam van de uitgeverij:");                             uitgeverij = in.readLine();
                    uitgeverijLijst.addElement(auteur);
                    break;
                    }
                case 'V':{
            System.out.println("<V>");
                    Text.prompt("Geef de titel van het boek in:");                              titel = in.readLine();
                    positie = (int)(titelLijst.indexOf(titel));
                    if (positie<0) System.out.println("Dat boek zat nog niet in de lijst!!!");
                    else {
                        titelLijst.removeElementAt(positie);
                        auteursLijst.removeElementAt(positie);
                        uitgeverijLijst.removeElementAt(positie);
                        System.out.println("Het boek werd verwijderd");
                    }
                    break;
                    }
                case 'Z':{
                    positie2 = 0;
                    Text.prompt("Geef de naam van de auteur:");                             auteur = in.readLine();
                    positie = (int)(auteursLijst.indexOf(auteur));
                    if (positie<0) System.out.println("Die auteur ken ik niet!!!");
                    else {
                        do{
                    positie = (int)(auteursLijst.indexOf(auteur,positie2));
                          System.out.print("De auteur: ");                              System.out.println(auteursLijst.elementAt(positie));                                  System.out.print("De titel: ");                               System.out.println(titelLijst.elementAt(positie));
                          System.out.print("De uitgeverij: ");                              System.out.println(uitgeverijLijst.elementAt(positie));
                          System.out.println("*******************");  
                          positie2 = positie+1;
                        }while (positie>0 && positie2<=auteursLijst.size());
                    }
                    break;
                    }
                case 'o':{
                    if ((int)(titelLijst.size())==0) System.out.println("Er zijn geen boeken om te tonen.");
                    else{
                      for (int p=0;p<titelLijst.size();p++){
                        System.out.print("De auteur: ");                                    System.out.println(auteursLijst.elementAt(p));                              System.out.print("De titel: ");                                     System.out.println(titelLijst.elementAt(p));
                        System.out.print("De uitgeverij: ");                                    System.out.println(uitgeverijLijst.elementAt(p));
                        System.out.println("*******************");
                      }
                    }
                    break;
                    }
                case 'A':{
            System.out.println("Gedaan!!!");                                            break;
                    }
                default: System.out.println("Je maakte een foute keuze!!!");
            }
try{
FileOutputStream hardeSchijf = new FileOutputStream("lijstOpgeslaan.obj");
ObjectOutputStream oo = new ObjectOutputStream(hardeSchijf);
oo.writeObject(auteursLijst);
oo.close();
}catch (IOException ie){
    System.out.println("Error");
}


        }while(menuKeuze!='A');
    }
}

sorry voor de lange code

Wijziging 1:
Hé da's raar, de insprongen die ik maakte voor de overzichtelijkheid die komen niet op het forum?

Wijziging 2:
'k heb de code tags toegevoegd, nu maakt ie wel rare insprongen, in kladblok toont ie et anders ma das niet zo belangrijk.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: Hmmm, ik krijg nog steeds één compilatiefout, de bedoel is dat ik de lijsten auteur, titels en uitgeverij opsla, allé dat is niet de bedoeling maar ik wil dat ie dat doet, het is namelijk veel gemakkelijker want dan moet ik dat niet altijd hertypen, de bedoeling is dat ik dat dan later in een ander progie kan steken.
Vind je het erg als ik er geen hout van snap :? Is er nu nog een probleem?
Het progie werkt overigens correct zonder die drie "try's" of hoe moet ik et noemen.
Als je try-catch blokken gebruikt kan je beter altijd even in de catch exception.printStackTrace() gebruiken. Je krijgt dan mooi te zien wat er mis gaat.
Hé da's raar, de insprongen die ik maakte voor de overzichtelijkheid die komen niet op het forum?
Je moet code eigenlijk tussen [ code] ... [ /code] zetten. Spaties en tabs blijven dan bewaard en het font is dan wat prettiger :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Vind je het erg als ik er geen hout van snap Is er nu nog een probleem?
bwa nee, het kan soms voorvallen dat ik rare zinnen maak. Maar da's een ander topic, al eentje van een hele tijd geleden!

Mijn vraag luidt gewoon: waarom wil ie dat nu niet compileren. :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Behalve dat hij bij mij javagently en Text niet kan vinden, compileert hij hier goed:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
martin@linux:~/test > javac BoekenLijst.java
BoekenLijst.java:3: package javagently does not exist
import javagently.*;
^
BoekenLijst.java:48: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
            Text.prompt("Geef je keuze in: ");
            ^
BoekenLijst.java:49: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
            menuKeuze = Text.readChar(in);
                    ^
BoekenLijst.java:54: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
                    Text.prompt("Geef de titel van het boek in:");
           titel = in.readLine();
                    ^
BoekenLijst.java:56: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
                    Text.prompt("Geef de naam van de auteur:");
        auteur = in.readLine();
                    ^
BoekenLijst.java:58: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
                    Text.prompt("Geef de naam van de uitgeverij:");
            uitgeverij = in.readLine();
                    ^
BoekenLijst.java:64: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
                    Text.prompt("Geef de titel van het boek in:");
           titel = in.readLine();
                    ^
BoekenLijst.java:77: cannot resolve symbol
symbol  : variable Text
location: class BoekenLijst
                    Text.prompt("Geef de naam van de auteur:");
        auteur = in.readLine();

Misschien kan je je melding even posten?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
code:
1
2
3
4
BoekenLijst.java:25: unreaported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
Vector subLijstAuteur = (Vector)lijst.readObject();

1 error

Dit geeft ie telkens

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ah ok, die fout moet je gewoon even afhandelen met een try-catch blok (of doorgooien)...

Zie de API-docs:
Throws:
ClassNotFoundException - Class of a serialized object cannot be found.

InvalidClassException - Something is wrong with a class used by serialization.

StreamCorruptedException - Control information in the stream is inconsistent.

OptionalDataException - Primitive data was found in the stream instead of objects.

IOException - Any of the usual Input/Output related exceptions.

ClassNotFoundException - If the class of a serialized object cannot be found.
Je kan dus maar beter ff alle Exceptions afvangen ;) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
Ah oké, I'll do that, en nu gaan slapen, thanks for helping me!!!

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
pikachuf: Ah oké, I'll do that, en nu gaan slapen, thanks for helping me!!!
Graag gedaan en slaap lekker :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


Verwijderd

Topicstarter
code:
1
2
3
catch (StreamCorruptionException se) {
    System.out.println("error-data not an object.");
}

Als ik deze tags zet maakt hij nog steeds problemen, maar dan geeft ie die exception niet maar dan zegt em cannot resolve symbol???
Pagina: 1