Problem mit Datei-Beschreibung

Meno

Neues Mitglied
Hallo alle zusammen
ich bin relativ neu in Java und hab ein paar Sachen ausprobiert und bin jetzt das erste mal auf ein Problem gestoßen, das ich alleine nicht mehr lösen kann.

Also folgendes:
ich hab in eclipse eine einfache Klasse geschrieben, ein Objekt erstellt und dieses sollte dann in eine datei geschrieben werden mittels Serialisierung. So das hat auch alles wunderbar geklappt.
Daraufhin hab ich ein jar-archiv erstellt und die bereits vorhandenen txt-dateien die ich verwendet hatte mit reingepackt. Wenn ich jetzt die jar-datei gestartet hab und das Objekt quasi beim beenden wieder serialisiert in die Datei geschrieben werden sollte, hat es eine neue Datei in dem Ordner angelegt, in dem das jar-archiv ist und dorthinein geschrieben und nicht in die von mir dafür vorgesehene Datei.

Meine Frage jetzt was genau muss ich verändern damit in die vorbereitete Datei geschrieben wird und nicht eine neue erstellt wird.

Hier meine Serialisierungs-Methode:
Java:
/**
	 * Serialisierung eine Objektes
	 * 
	 * @param element
	 * @param datei
	 */
	public void serializeObject(T element, String datei) {
		
		try {
			ObjectOutputStream os = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(datei)));
			
			os.writeObject(element);
			os.close();
		}
		catch(IOException e) {
			System.out.println("Fehler");
		}
		
			
	}//Ende serializeObject()

und hier der Code wo ich nach der Datei suche:

Java:
public class TestDriver {
	
	private MainFrame myFrame;	
	
	public static void main(String[] args) {
		
		TestDriver myApp = new TestDriver();
		myApp.init();

	}
	
	private void init() {
		
		int zustand;
		boolean isEmpty;
		File stadt = new File("stadt.txt");
		
		isEmpty = lesetest(stadt);
		
		//Aufruf abhaengig davon, ob Datei leer ist oder nicht
		if(isEmpty) {
			zustand = 1;
		} else {
			zustand = 0;
		}
		
		myFrame = new MainFrame(zustand);
		
	}
	
	/**
         * Testet ob Datei leer ist oder nicht
	 * 
	 * @param path
	 * @return true wenn datei leer, sonst false
	 */
	private boolean lesetest(File path) {
		boolean isEmpty = true;
		int a;
		
		try {
			FileInputStream fr = new FileInputStream(path);
			
			a = fr.read();
			if(a != -1) {
				isEmpty = false;
			}
		}
		catch(IOException e) {
			System.out.println("Fehler");
		}
		
		return isEmpty;
	}

}

(Wenn weiterer code benötigt wird bitte sagen, weil ich nicht genau weiß was in dem Fall wichtig ist).

Vielen Dank und liebe Grüße
Meno

P.S. Bitte entschuldigt den Titel ich wusste nicht wie ich das hier nennen sollte 🙁
 
Naja, im Grund ist eine jar-Datei ein zip-Archiv. Wenn du wirklich die Daten da ersetzen möchtest, dann musst du die wohl oder übel "reinzippen". Das ist aber imho nicht so ohne weiteres möglich (ala "unjar", datei verändern, jar bauen, jars durch einen anderen Prozess ersetzen)
Bist du sicher, dass du die Datei unbedingt IN der jar haben musst?
 
Zuletzt bearbeitet:
Daraufhin hab ich ein jar-archiv erstellt und die bereits vorhandenen txt-dateien die ich verwendet hatte mit reingepackt. Wenn ich jetzt die jar-datei gestartet hab und das Objekt quasi beim beenden wieder serialisiert in die Datei geschrieben werden sollte, hat es eine neue Datei in dem Ordner angelegt, in dem das jar-archiv ist und dorthinein geschrieben und nicht in die von mir dafür vorgesehene Datei.
Dem hier geposteten Code nach, muss die Datei vorher schon im Verzeichnis existieren, sonst würde eine FileNotFoundException geworfen werden. Oder wird im Code irgendwo eine Datei erzeugt?
Hinweis: statt
Java:
catch(IOException e) {
            System.out.println("Fehler");
}
besser:
Java:
catch(IOException e) {
            e.printStackTrace()
}
Dann bekommt man mit was für ein Fehler und wo er aufgetreten ist.

Willst Du zur Laufzeit des Programms in ein Textfile innerhalb des jars schreiben? Das geht nicht - zumindest nicht ohne rum zu tricksen.

Um Dateien innerhalb eines jars aus zu lesen:
Java:
MeineKlasse.class.getResourceAsStream(String nameOfResource);
 
ne nicht unbedingt es funktioniert ja auch so ohne Probleme, aber ich will viel mehr wissen ob man es so machen kann, das eben in die von mir dafür vorgesehene Datei geschrieben wird
 

Zurück
Oben