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.
Hallo, ich möchte eine Textdatei einlesen und sie rückwärts geschrieben in einer neue Datei ausgeben. Auf der Konsole wird sie rückwärts ausgegeben aber in meiner Ausgabedatei vorwärts. ich finde meinen Fehler nicht!? ???:L
Java:
import java.io.*;
public class Datei_rueckwaerts
{
public static void main(String args[]) throws Exception
{
//Textdatei zeilenweise lesen
FileReader fr = new FileReader("zu lesender Text.txt");
BufferedReader br = new BufferedReader(fr);
String text = "";
//Text zeilenweise ausgeben
FileWriter fw = new FileWriter("Ausgabe.txt");
BufferedWriter bw = new BufferedWriter(fw);
while( (text = br.readLine()) != null )
{
String rueckwaerts = text;
StringBuffer strBuf = new StringBuffer(rueckwaerts);
System.out.println(strBuf.reverse());
bw.write(rueckwaerts);
bw.newLine();
}
bw.close();
br.close();
}
}
Hat der TO ein Glück, dass er nur Strings rückwärts ausgeben will. Wär's Geld gewesen, hätten wohl die wenigsten 'ne Lösung parat (zumindest keine, die nicht in Arbeit ausartet).
"System.out" ist eigentlich auch nur ein Stream. Allerdings wird bei Objekten (z.B. StringBuffer oder -Builder) vor der Ausgabe noch ein "toString()" darauf ausgeführt. Somit ergeben sich für die Ausgabe in eine Datei zwei Möglichkeiten:
1. Man schachtelt den Filestream in einen DataOutputStream und schreibt dort "strBuf.reverse().toString()" rein oder
2. Man schachtelt den FileStream in einen PrintStream und behandelt ihn dann wie man es von "System.out" gewohnt ist.
Hat der TO ein Glück, dass er nur Strings rückwärts ausgeben will. Wär's Geld gewesen, hätten wohl die wenigsten 'ne Lösung parat (zumindest keine, die nicht in Arbeit ausartet).
"System.out" ist eigentlich auch nur ein Stream. Allerdings wird bei Objekten (z.B. StringBuffer oder -Builder) vor der Ausgabe noch ein "toString()" darauf ausgeführt. Somit ergeben sich für die Ausgabe in eine Datei zwei Möglichkeiten:
1. Man schachtelt den Filestream in einen DataOutputStream und schreibt dort "strBuf.reverse().toString()" rein oder
2. Man schachtelt den FileStream in einen PrintStream und behandelt ihn dann wie man es von "System.out" gewohnt ist.
Durch strBuff.reverse() wird das Objekt im Stringbuffer mit dem Namen strBuf umgedreht.
Deine Variable rueckwaerts tut nichts ausser den Text zugewiesen zu bekommen, bzw. ihn weiterzugeben als Parameter für Stringbuffer. Das ändert nichts an der Variable rueckwaerts.
Java:
public class Test8
{
public static void main(String[] args)
{
StringBuffer strBuf = new StringBuffer("Hallo");
System.out.println(strBuf.reverse()); // Stringbuffer wird reversed
System.out.println(strBuf.toString()); // und bleibt es
}
}
Durch Deinen Ausdruck mit println(strBuf.reverse()) wird der String im Stringbuffer umgedreht und bleibt es auch. Du brauchst nur noch mit:
Java:
bw.println(strBuf.toString());
den String auszugeben. Wenn Du allerding Deinen Komtrollausdruck
Java:
System.out.println(strBuf.reverse());
entfernst, muss das reverse() natürlich wo anders aufgerufen werden
Ihr könnt's mir glauben... das "toString()" ist nicht nötig, denn es wird per "println(Object x)" aufgerufen. "reverse()" dreht das Array des StringBuffers (wie gesagt) dauerhaft (um 180° wenn man so will), daher wird es beim 2. "reverse()" schlicht zurückgedreht, demzufolge ist dieses zuviel (verdammtes C&P ).