Jar mit File in den serialisiert werden soll

DerKellerautomat

Grünschnabel
Hallo!

Ich will mir gerade eine ausführbare Datei für ein Verwaltungsprogramm mit GUI basteln, was aber nicht so recht klappen will.

Ich habe mein gesamtes Programm in einem Eclipse Project. Darin sind noch 5 Packages in den dann die Klassen sind. In dem Package persistenz ist ein File der SerialPersistenzFile.ser heißt. In einer Klasse serialisiere ich in genau diesen File, und lese natürlich auch aus dieser.

Als Pfad habe ich folgendes angegeben:
...
FileInputStream f = new FileInputStream("bin/persistenz/PersistensFile2.ser");
ObjectInputStream input = new ObjectInputStream(f);
...

Ich habe dann versucht mit Eclipse eine ausführbare Jar zu erstellen (was auch bei anderen Programmen ohne Probs geht)
aber wenn ich die jar ausführen will bekomme ich eine FileNotFoundException.

Das Archiv hat folgende Strucktur: JarName/persistens/PersistenzFile2.ser.

Ich habe schon alle möglichen Pfad angaben probiert, aber es will einfach nicht klappen...

Ich hoffe ihr könnt mir helfen, bevor ich total am Rad drehe

Danke schonmal
 
Hi,
Setzte den Pfad mal so:
Java:
[ClassName].class.getResource("bin/persistenz/PersistensFile2.ser");
Wenn dein Pfad wie oben lauetet, muss es ein Package "bin.persistenz" geben, indem dann die
Datei liegt.
Ciao
DosCoder
 
Zuletzt bearbeitet:
Das geht leider nich. Auf wenn ich es in Eclipse mit dem Pfad (der normal geht) bekomme ich ne NullPointerException mit:

Code:
FileInputStream f = new FileInputStream(new File(SerialPS.class.getResource(filename).toURI()));


Also die ganze Laden Methode sieht so aus :

Code:
public Vector<T> load(String filename) {
		Vector<T> klausurenlisten; 
		try{

			FileInputStream f = new FileInputStream(new File(SerialPS.class.getResource(filename).toURI));
			ObjectInputStream input = new ObjectInputStream(f);
			
			
			klausurenlisten = (Vector<T>)input.readObject();
			
			
			f.close();
			input.close();
		return klausurenlisten;
			
			}catch(Exception e){
			System.out.println("Fehler beim Laden: "+e.getMessage());
			}
		return null;
	}
 
Du wirst aber die Datei innerhalb des Jars nicht schreiben können, da dies das Jar verändern würde. Lege die Datei doch einfach relativ zum Jar ab. Oder besser im Userverzeichnis.
 
Hi,
muss deine Datei unbedingt in dem Jar stecken, oder kann die auch woanders liegen? Wenn du sie zum Beispiel im selben Verzeichnis hast wie das Jar, kannst du einen eine relative Pfadangabe von diesem Verzeichnis machen. Wenn du das ganze mit Eclipse ausführst, wird nicht anderes gemacht: Die Datei wird aus dem Ordner bin/persistenz/, der im Arbeitsverzeichnis liegt, genommen. Wenn du nun ein Jar erzeugst, wird dieses Jar in einem anderem Verzeichnis abgelegt, als Eclipse arbeitet(Netbeans benutzt dazu "dist", abewr wie das unter Eclipse funktioniert weiß ich nicht). Auf jeden Fall muss du den Ordner "bin" dann auch in dieses Verzeichnis kopieren. Nun solltest du mit deinem ersten Codevorschlage Erfolg haben.

Hier noch mal die Verzeichnisstrukur:
Code:
-Projektordner(=Arbeitspfad, hier arbeitet Eclipse beim Ausführen des Programms)
 -bin
  +persistenz
 -dist(=Ordner, in den die Jars abglegt werden)
 +bin
  meinProg.jar
 

Neue Beiträge

Zurück