[Java]Laden van .dat file in jar

Pagina: 1
Acties:

  • maxjuh
  • Registratie: November 2004
  • Laatst online: 19-03-2025
In mijn programme heb ik een ArrayList die ik wegschrijf als een object via een ObjectOutputStream en ook weer inlees via een stream. Dit gaat allemaal goed maar ik zou graag de .dat file in de jar willen hebben zodat ik de file niet meer buiten de jar hoef te hebben. Ik kwam erachter dat dat heel makkelijk kon op deze manier

Java:
1
java.net.URL URL = this.getClass().getResource("images/blaat.png");


Dit werkt prima voor mijn images in de applicatie (die zitten dus inmiddels al keurig in de jar) maar als ik dit bij mijn .dat file doe krijg ik een FileNotFoundException (bij de tweede regel van onderstaande code)

Java:
1
2
java.net.URL location = SpelersArrayList.class.getResource("/spelers.dat");
ObjectInputStream in = new ObjectInputStream(new FileInputStream(location.getFile()));


Als ik dit netjes debug om te kijken wat de waarde van location is. Dan is die helemaal juist..

Heb al meerdere manieren geprobeerd om het toch aan de praat te krijgen door bijv. niet getFile() te gebruiken maar getPath() en toString(). Ofom de location gelijk als een stream te leveren via getResourceAsStream maar dan kom ik weer met het probleem dat een FileInputStream geen InputStream wilt hebben.

Wat doe ik hier fout?

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 11:35
Probeer dit eens:

Java:
1
ObjectInputStream in = new ObjectInputStream(SpelersArrayList.class.getResourceAsStream("/spelers.dat"));

[ Voor 18% gewijzigd door Kwistnix op 09-06-2006 23:06 ]


  • ripperke
  • Registratie: Augustus 2003
  • Laatst online: 15-10-2025

ripperke

w00t!

zou goed kunnen dat oplossing van hierboven ook werkt, komt uit me cursus van dit jaar en geeft mss nog wat extra uitleg.
Er is wel een probleempje om xml files in uw jar file te steken: u kan ze dan niet lezen met behulp van this.getClass().getResource(). Dit komt omdat getResource() een URL object teruggeeft. Dit werkt goed voor tekeningen. Maar het werkt niet voor bestanden. Bestanden moet u lezen met behulp van this.getClass().getResourceAsStream(). Dit geeft een InputStream object terug.

Hier volgt een voorbeeldje dat een gewone tekstfile lijst.txt uit een jar gaat lezen en in een DefaultListModel van een JList gaat toevoegen. (Om met een xml-bestand te werken, moet u analoog te werk gaan. Alleen moet u slechts de eerste drie lijnen gebruiken en doorgeven aan de klasse die het xml bestand gaat lezen).
code:
1
2
3
4
5
6
7
8
9
10
11
12
InputStream in
= this.getClass().getResourceAsStream("lijst.txt");
InputStreamReader inreader=new InputStreamReader(in);
BufferedReader breader=new BufferedReader(inreader);
String lijn="qsfd";
try{
lijn=breader.readLine();
while (lijn!=null) { dlm.addElement(lijn);
lijn=breader.readLine();
}
}
catch(IOException eof){}

If TCP/IP handshaking was less formal, perhaps SYN/ACK would be YO/WASSUP


  • maxjuh
  • Registratie: November 2004
  • Laatst online: 19-03-2025
ripperke schreef op vrijdag 09 juni 2006 @ 23:11:
zou goed kunnen dat oplossing van hierboven ook werkt, komt uit me cursus van dit jaar en geeft mss nog wat extra uitleg.


[...]


code:
1
2
3
4
5
6
7
8
9
10
11
12
InputStream in
= this.getClass().getResourceAsStream("lijst.txt");
InputStreamReader inreader=new InputStreamReader(in);
BufferedReader breader=new BufferedReader(inreader);
String lijn="qsfd";
try{
lijn=breader.readLine();
while (lijn!=null) { dlm.addElement(lijn);
lijn=breader.readLine();
}
}
catch(IOException eof){}
De oplossing van FallenAngel666 werkt inderdaat maar toch bedankt :) ...

Kan ik nu lekker mijn .dat files in me rar zetten (toch weer wat netter :7) ... thx

Het rare is dat ik ook nog een source code op internet heb bekeken waar iemand het op precies de zelfde manier deed als mij... maargoed voortaan dus maar zo doen.

  • maxjuh
  • Registratie: November 2004
  • Laatst online: 19-03-2025
Alleen nu kom ik met het probleem dat als ik het object wil wegschrijven via ObjectOutputStream dat die natuurlijk een OutputStream verwacht en geen inputstream. Helaas staat er in de api van class geen OutputStream. Of is dit simpelweg niet mogelijk zonder de hele jar opnieuw de createn.

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 11:35
maxjuh schreef op vrijdag 09 juni 2006 @ 23:45:
Alleen nu kom ik met het probleem dat als ik het object wil wegschrijven via ObjectOutputStream dat die natuurlijk een OutputStream verwacht en geen inputstream. Helaas staat er in de api van class geen OutputStream. Of is dit simpelweg niet mogelijk zonder de hele jar opnieuw de createn.
Resources in een JAR zijn read-only.
Als je dynamische configuratiegegevens persistent wil maken, dan zou je naar Preferences kunnen kijken.
Pagina: 1