Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Du kannst deinem FileWriter/FileOutputStream neben der Zieldatei noch einen boolean mitgeben. Dieser legt fest, ob angehängt, oder überschrieben werden soll.
Aber wie funktioniert es "umgekehrt", also dass ich beim einlesen nur die letzte Zeile erhalte bzw. die letzte Zeile von den anderen unterscheiden kann?
Du musst bis zur letzten Zeile alles einlesen. Dateien sind sequentiell aufgebaut, d. h. du kannst nicht einfach vom Ende oder mittendrin anfangen zu lesen.
Wichtig ist vor allem, dass Du ein Muster in den Datei Inhalten erkennst und dieses dann benutzt für die Dinge, die Du anstellen willst.
Du könntest den Inhalt der Datei auch in eine HashMap stopfen zum Beispiel
Code:
Map<Integer,String> myMap = new HashMap<Integer,String>();
Dann hast Du zu jeder Zeile einen Index und kannst zum Beispiel, falls gewünscht, doppelte Zeilen in Deiner Datenmenge myMap ausschliessen mit
Code:
if(!myMap.contains(zeile))
{
myMap.add(zeile);
}
myMap kannst Du dann mit einem FileWriter wieder in die Datei schreiben....
Eine HashMap hat keine Methode add(), sondern put(), wo du Key und Value angeben musst. Funktioniert natürlich auch, dazu musst du aber die Zeilen selber zählen lassen. Auf doppelte Einträge prüfen könntest du dann mit containsValue()
--> ArrayList wäre wohl besser, dann musst du die Zeilennummer nicht manuell mitzählen
Hab es jetzt etwas anders gelöst, trotzdem danke für eure Hilfe!
Habe aber noch ein Problem... und zwar schreibe ich in die txt-Datei eine Zahl und danach ein Datum.
Beim Einlesen zerlege ich diese Strings um nur die Zahl zu erhalten.
Führe ich das ganze als Java Anwendung aus, funktioniert es. Aber so bald ich die Klasse als JavaBean in eine jsp einbinden will, erhalte ich eine "NumberFormatException" für den String "null". Bedeutet ja im Umkehrschluss, dass der Wert, den er aus der Datei liest null ist.
Aber warum funktioniert es einwandfrei, wenn es als reine java anwendung ausgeführt wird und sonst nicht?
Habt ihr dazu eine Idee?
blind geraten: die JSP wird von woanders ausgeführt und findet daher den relativen Pfad nicht,
für richte Erklärung: Code+ Umgebung posten (was bei JSPs nicht gerade trivial ist)/
selber suchen: Datei anschauen: wird sie gefunden?, ist die Dateigröße gleich?, welche Strings werden zeilenweise eingelesen ohne gleich zerlegen/ parsen zu wollen?,
mit einfacherer Datei nur mit einem Buchstaben x testen
Also zur Umgebung: arbeite mit Tomcat und Easy Eclipse.
JSP Seite bindet nur als JavaBean ein, die betroffende Methode wird innerhalb der Klasse aufgerufen:
Code:
idManager idMan = new idManager();
public String getid() {
int new_id = idMan.getID();
idMan.setID(String.valueOf(new_id), getName());
return new_id;
}
Hier aufgerufen werden diese Methoden:
getID() liefert die letzte ID, die in der Textdatei steht:
Habe den Fehler gefunden, verstehe ihn aber nicht so ganz.
Hab durch ein paar Ausgaben auf der Konsole rausgefunden, dass JBoss auf eine andere Datei zugreift als die Java Klasse.
Wenn ich die Klasse alsAnwendung ausführe wird die txt-Datei aus meinem Projektordner zum Lesen / Schreiben verwendet.
Binde ich die Klasse als JavaBean ein, wird eine txt-Datei im JBoss bin-Ordner verwendet... aber warum?
Ich wollte ja eigentlich, dass die txt-Datei immer beim Projekt dabei ist und nicht einfach im JBoss Ordner neu erstellt wird...