Nacheinander folgende Strings in Textdokument auf neue Zeile schreiben

KeVoZ_

Aktives Mitglied
Hey Java-Community!

Ich habe vor kurzem eine Client-Server-Kommunikation gebastelt, in der der Client dem Server einen String zukommen lässt.
'Lauschen', Empfangen und Lesen habe ich wiefolgt gelöst:
Java:
while(true){
			Socket listen = server.accept();
			InputStreamReader PortLeser = new InputStreamReader(listen.getInputStream());
			BufferedReader eingabe = new BufferedReader(PortLeser);
			String s = eingabe.readLine();
			System.out.println("Client# " + s);
			logger(s /*+lineSeparator*/);   //Die Methode zum Verarbeiten des Strings - Dem Textdokument hinzufügen
}
Nun möchte ich den empfangenen String meiner log-Datei hinzufügen. Überlegt hatte ich mir, dass ich das Textdokument auslese, in einen String auslagere und anschließend mit dem frisch dazugekommenen String wieder einfüge. Bis zu diesem Punkt läuft alles ganz gut, nur möchte ich, dass die immer neu empfangenen Strings mit einem Zeilenumbruch in eine neue Zeile geschrieben werden(, und nicht wie im Moment, dass es einfach fortan auf der ersten Zeile geschrieben wird.)

Hier die "logger();" Methode:
Ich habe hier schon eigentlich überall versucht einen Zeilenumbruch einzubauen, allerdings werden dann nur der letzte empfangene String und der neue (auf zwei Zeilen) geschrieben.
Java:
@SuppressWarnings({"unused", "resource"})
	public static void logger(String logContent){
		
		String input = "";
		String line = "";
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(logFilePATH.toFile()));
			
			while((line = br.readLine()) != null) {
	               
	               input = line;
	               
	            }
			
		} catch (FileNotFoundException e) {
			System.out.println("Server# Die LogFile konnte nicht gefunden werden!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Server# Es ist ein Fehler während des Auslesens der LogFile aufgetreten!");
			e.printStackTrace();
		} finally {
            if(br != null) {
                try {
                    br.close();
                } catch(IOException e) {
                	System.out.println("Server# Es ist ein Fehler aufgetreten!");
                    e.printStackTrace();
                }
            }
        }
		
		
		try (FileOutputStream fos = new FileOutputStream(logFilePATH.toFile())) {
			
		     FileWriter fw = new FileWriter(logFilePATH.toFile());
		     BufferedWriter text = new BufferedWriter(fw);
		     
		     PrintWriter writer = new PrintWriter(logFilePATH.toFile());
		     
		     writer.write(input);
		     writer.append(logContent);
		     writer.close();
		     
		} catch (IOException e) {
			System.out.println("Server# Es ist ein Fehler während des Schreibens in die LogFile aufgetreten!");
			e.printStackTrace();
		}
	}

Wie kann ich mein oben beschriebenes Problem mittels diesem Aufbau lösen? Oder gibt es vielleicht einen anderen, möglicherweise einfacheren Weg zum Ziel zu kommen?

Vielen Dank an alle!
Mit freundlichen Grüßen
Kevin W.
 

Robat

Top Contributor
Hast du schon mal die Methode BufferedWriter#newLine() probiert?
Diese erzeugt einen Zeilenumbruch in einer Textdatei.

Lg
 

KeVoZ_

Aktives Mitglied
@Robat Hey!
Jain. In die Datei schreibe ich mit dem PrintWriter. Wechsle ich zum schreiben zum BufferedWriter, wird mir ein Fehler in der IDE angezeigt. Nach meiner Logik müsste ich einen Zeilenumbruch beim Auslesen schon setzen, dass das beim Schreiben für jeden String einzeln mit übernommen wird. - Nur leider bekomm ich dann von allen nur noch 2 im Endeffekt raus.
 

Robat

Top Contributor
Kannst du mir mal ein Beispiel deiner logDatei geben?
Dann versteh ich vielleicht besser, was du meinst.

Lg
 

KeVoZ_

Aktives Mitglied
meine logDatei besteht aus einem leeren Textdokument(log.txt).
Der Client schickt, je nach Gegebenheit, eine Nachricht, welche ich anschließend auf dem Server mithilfe eines BufferedReaders auslese und in einen String speichere:
Java:
InputStreamReader PortLeser = new InputStreamReader(listen.getInputStream());
BufferedReader eingabe = new BufferedReader(PortLeser);
String s = eingabe.readLine();
System.out.println("Client# " + s); //Auf dem Server (also im Screen) die Nachricht ausgeben. (Diese soll dann auch ins Textdokument geschrieben werden)
logger(s); //Methode zum Verarbeiten des Strings - In Textdokument schreiben --siehe unten

Den Text, der nun in dem String s gespeichert ist, übergebe ich nun der Methode logger();
Java:
@SuppressWarnings({"unused", "resource"})
	public static void logger(String logContent){ //LogContent entspricht dem Text, welchen ich in String s gespeichert habe
		
		String input = "";
		String line = "";
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(logFilePATH.toFile())); //Ich lese den bereits vorhandenen Text der log.txt aus...
			
			while((line = br.readLine()) != null) {//...so viel bzw. lange, bis ich jede Zeile habe...
	               
	               input = line;//...und speichere das in den String input.
	               
	            }
			
		} catch (FileNotFoundException e) {
			System.out.println("Server# Die LogFile konnte nicht gefunden werden!");
			e.printStackTrace();
		} catch (IOException e) {
			System.out.println("Server# Es ist ein Fehler während des Auslesens der LogFile aufgetreten!");
			e.printStackTrace();
		} finally {
            if(br != null) {
                try {
                    br.close();
                } catch(IOException e) {
                	System.out.println("Server# Es ist ein Fehler aufgetreten!");
                    e.printStackTrace();
                }
            }
        }
		
		
		try (FileOutputStream fos = new FileOutputStream(logFilePATH.toFile())) {
		     
		     PrintWriter writer = new PrintWriter(logFilePATH.toFile()); //Nun schreibe ich das Textdokument neu:
		     
		     writer.write(input); //Einmal mit dem, was schon drinnen stand...
		     writer.append(logContent); //...und dem, was mit dem String s neu dazugekommen ist.
		     writer.close();
		     
		} catch (IOException e) {
			System.out.println("Server# Es ist ein Fehler während des Schreibens in die LogFile aufgetreten!");
			e.printStackTrace();
		}
	}
Ich hab' das jetzt mal im Code kommentiert, was ich bezwecken will. Ich hoffe das ist verständlich, ansonsten einfach fragen ;)
 

Robat

Top Contributor
writer.write(input); //Einmal mit dem, was schon drinnen stand...
writer.append(logContent); //...und dem, was mit dem String s neu dazugekommen ist.
writer.close();

Also dein newLine muss auf jeden Fall hier rein.
Immer zwischen write(input) und append.

Ich weiß nicht wie du bis jetzt den Zeilenumbruch hervorgerufen hast.. aber:

PrintWriter.println() generiert ein Zeilenumbruch OS-Abhängig.
Bedeutet bei Unix Systemen wird es mit LF (\n) generiert und bei Windoof mit CR+LF (\r\n).

Du könntest jetzt - je nach dem - immer schreiben:
writer.print("..." + "\r\n") // oder eben nur \n

Oder du nimmst den sicheren Weg über System.getProperty("line.seperator");

BTW:

while((line = br.readLine()) != null)
{//...so viel bzw. lange, bis ich jede Zeile habe...

input = line;//...und speichere das in den String input.

}

Du überschreibst dein Input immer. Du solltest den Text aber anhängen! input += line


Lg
 

KeVoZ_

Aktives Mitglied
Hey @Robat!
Vielen Dank!
Das entscheidende Problem war das input += line!

Das Schreiben an sich bleibt, dort musste ich keinen Zeilenumbruch einbauen.
Java:
writer.write(input);
writer.append(logContent);
writer.close();

Mit jeder line, welche ich hinzufüge, füge ich auch einen Zeilenumbruch hinzu.
Java:
input += line + lineSeparator;


Vielen Dank für Deine super Hilfe!
Mit freundlichen Grüßen!
Kevin Wilde
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Buttons nacheinander ausführen Allgemeine Java-Themen 2
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
T ConcurrentLinkedQueue nacheinander abarbeiten? Allgemeine Java-Themen 3
I String Array nacheinander ausgeben Allgemeine Java-Themen 7
A Problem: Mehrere PDF-Files nacheinander Öffnen Allgemeine Java-Themen 12
Z Seiten nacheinander aufrufen (Wichtig :) Allgemeine Java-Themen 10
E HashMap/Table sortiert nach nacheinander eingefuegten Elmeme Allgemeine Java-Themen 6
N Objekte nacheinander erzeugen! Wie? Allgemeine Java-Themen 6
Zrebna Was bedeutet folgende Fehlermeldung...? Allgemeine Java-Themen 1
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
L Wie ist folgende Abhängigkeit in UML2 zu formulieren. Allgemeine Java-Themen 15
Y Wann folgende Technologien benutzen Allgemeine Java-Themen 5
A AOP und folgende Idee Allgemeine Java-Themen 13
L Wie komme ich an folgende Java-Sachen von Sun Allgemeine Java-Themen 2
O regulärer Ausdruck zum durchsuchen eines Strings verwenden Allgemeine Java-Themen 2
B HeapSort für Array of Strings funktioniert nur teilweise Allgemeine Java-Themen 3
W JSON parsen eines ,mit JS.stringify erstellten Strings Allgemeine Java-Themen 27
L allgemein Strings händisch in Liste sortieren Allgemeine Java-Themen 47
N MySQL mit Strings Allgemeine Java-Themen 3
T Letztes Zeichen eines Strings enfernen Allgemeine Java-Themen 14
P Strings: equals vs == Allgemeine Java-Themen 47
G Objekte mit Strings Aufrufen Allgemeine Java-Themen 8
W Collections Suche Collection, um Strings mit Indizees versehen Allgemeine Java-Themen 47
V Datentypen Graphikrechner 2/Strings und Variablen in Doubles umwandeln Allgemeine Java-Themen 6
LimDul Mittels Streams aus Strings A B C den String A, B und C machen Allgemeine Java-Themen 12
Meeresgott Best Practice Strings auf Inhalte vergleichen Allgemeine Java-Themen 1
N DNA Strings vergleichen Allgemeine Java-Themen 1
Q-bert Strings aus der JList in eine Datenbank speichern Allgemeine Java-Themen 1
K Vergleich von Strings von Objekten Allgemeine Java-Themen 4
J Strings int textdokumente speicher Allgemeine Java-Themen 3
K Strings sortieren: 2 Kritieren Allgemeine Java-Themen 5
A Vector Strings in Array splitten Allgemeine Java-Themen 6
B Wie vergleiche ich Strings in einer Liste? Allgemeine Java-Themen 5
T Strings über Bluetooth zwischen PC,µc oder Samrtphone senden und empfangen Allgemeine Java-Themen 0
N Methoden Methoden einer Klasse auf Grundlage eines Strings aufrufen Allgemeine Java-Themen 6
K Bestimmten Bereich eines Strings lesen Allgemeine Java-Themen 6
H RegularExpression zwischen zwei Strings Allgemeine Java-Themen 2
Neumi5694 Operatoren regEx für das Erstellen eines Strings verwenden Allgemeine Java-Themen 3
H Strings vergleichen Allgemeine Java-Themen 9
O Mustererkennung in Strings Allgemeine Java-Themen 4
Y String-Collection: längste gemeinsame Strings / Prefixe Allgemeine Java-Themen 3
F Problem mit Strings Allgemeine Java-Themen 8
D Strings chemisch splitten Allgemeine Java-Themen 3
K Wörter in Strings zählen Allgemeine Java-Themen 7
L Strings nach sortiertem String zurück ordnen Allgemeine Java-Themen 0
L Strings nach gleichem Muster ordnen Allgemeine Java-Themen 4
L Fragen für Facharbeit: Analyse von Strings in Java Allgemeine Java-Themen 4
D Strings vergleichen; Komma ignorieren Allgemeine Java-Themen 3
K Java Operatoren mit Strings darstellen Allgemeine Java-Themen 8
G Strings erzeugen Allgemeine Java-Themen 20
B HTML Tags in Strings umwandeln Allgemeine Java-Themen 4
N Input/Output Vergleich von identischen Strings schlägt fehl Allgemeine Java-Themen 5
U Große Liste von Strings mit indiziertem Zugriff Allgemeine Java-Themen 31
A ,,Textformatierungsbefehle" für strings deaktivieren Allgemeine Java-Themen 8
S Strings vergleichen Allgemeine Java-Themen 11
C Strings in Excel einlesen! Allgemeine Java-Themen 2
S Strings gehen "kaputt" wenn ich in CVS ein und wieder auschecke. Allgemeine Java-Themen 2
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
C Strings und JSON Objekte so klein wie möglich im Speicher ablegen Allgemeine Java-Themen 5
J String zerlegen in einzelne Strings Allgemeine Java-Themen 7
F Konstanten mir Strings "verknuepfen" Allgemeine Java-Themen 10
1 zwei Strings vergleichen Allgemeine Java-Themen 16
L Object Instanz anhand eines Strings Allgemeine Java-Themen 10
S vector & strings Allgemeine Java-Themen 26
N Strings mit null wiedergabe Splitten Allgemeine Java-Themen 4
K Strings sortieren (knifflig) Allgemeine Java-Themen 7
P Codierung der strings umändern Allgemeine Java-Themen 10
N Zahlen in Strings einer ArrayList sortieren Allgemeine Java-Themen 14
F 2 Strings zusammenfügen Allgemeine Java-Themen 2
D Strings von HTML befreien Allgemeine Java-Themen 17
S Strings zu Color-Instanzen parsen? Allgemeine Java-Themen 7
C Strings zwischen 2 Zeichen auslesen Allgemeine Java-Themen 7
T Explizite Typkonversation mit Strings Allgemeine Java-Themen 9
R Locale spezifische DateFormat Strings? Allgemeine Java-Themen 3
M Wie kann ich alle System.out Strings in ein log window umleiten? Allgemeine Java-Themen 6
R Java function die Strings escaped, sodass ich sie in Javascript verwenden kann? Allgemeine Java-Themen 4
ruutaiokwu objektreferenz eines strings... Allgemeine Java-Themen 9
data89 [Kurze Frage] Ähnlichkeit zweier Strings ermitteln Allgemeine Java-Themen 19
S bestimmte Strings spliten! Allgemeine Java-Themen 7
M Warum Strings mit equals vergleichen... Allgemeine Java-Themen 6
Daniel_L Suche nach ganzen Wörtern (wholeword) in Strings? Allgemeine Java-Themen 4
A Strings joinen, Standard-Library? Allgemeine Java-Themen 9
Y Mal wieder vergleichen von Strings.[Leider noch ein Problem] Allgemeine Java-Themen 18
data89 Die Größe eines Strings in Byte berechnen? Allgemeine Java-Themen 12
A Auslesen von Strings aus einer xls-Datei Allgemeine Java-Themen 16
G Spezialfrage zu Strings Allgemeine Java-Themen 11
C Textteile aus Strings extrahieren? Allgemeine Java-Themen 6
J Teile eines Strings ersetzen Allgemeine Java-Themen 2
G schnell Strings vergleichen Allgemeine Java-Themen 4
J Name eines Strings durch einen String festlegbar? Allgemeine Java-Themen 2
G Strings zerlegen und substrings auslesen Allgemeine Java-Themen 2
Z Letztes zeichen eines strings löschen Allgemeine Java-Themen 3
V Speicherplatz eines Strings? Allgemeine Java-Themen 12
H MIDlets und Strings Allgemeine Java-Themen 2
C Pixelanzahl eines Strings ermitteln Allgemeine Java-Themen 12
T Strings darf nur Ziffern, +/- haben Allgemeine Java-Themen 9
A Fehler beim Ersetzen eines Strings Allgemeine Java-Themen 3
G Strings die Zahlen enthalten sinnvoll sortieren (A2 < A10 Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben