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.
ich bin gerade dabei ein Java Buch zu lesen und habe es fast durch. Nun bin ich an einer Übung angelangt und frage mich wieso ich durch eine kleine Änderung 2 verschiedene Ausgaben bekomme. Die Frage hängt in meinem Kopf fest und ich hoffe jemand kann mir helfen.
Der folgende Code funktioniert einwandfrei:
Java:
package chapter19;
import java.io.*;
/**
*
* @author SuperMario
*/
public class CopyFile {
public static void kopieren(Reader in, Writer out) throws IOException {
// Solange noch etwas in der Datei steht
int character;
while ((character = in.read()) != -1) {
out.write(character);
}
in.close();
out.close();
}
public static void main(String[] args) {
try {
File original = new File(args[0]);
File clone = new File(args[1] + ".txt");
BufferedReader gelesen = new BufferedReader(new FileReader(original));
clone.createNewFile();
BufferedWriter neu = new BufferedWriter(new FileWriter(clone));
kopieren(gelesen, neu);
}
catch (FileNotFoundException fe) {
System.out.println("Datei wurde nicht gefunden!");
}
catch (IOException ie) {
System.out.println("Konnte nicht in Datei schreiben oder lesen!");
}
catch (ArrayIndexOutOfBoundsException ae) {
System.out.println("Aufruf: java CopyFile <Quelldatei> <Name der Zieldatei>");
}
}
}
Sobald ich jedoch das "int character" einfach weglasse, was ich auch zunächst tat, bekomme ich eine völlig andere Ausgabe in die Datei (Buchstaben sind dabei so gut wie hin- und hergefwürfelt):
Java:
// Solange noch etwas in der Datei steht
//int character;
while ((in.read()) != -1) {
out.write(in.read()); //hier stand character
}
...
Dabei wird aus "Ein kleiner Fisch schwimmt im See" folgendes: "i lie ic cwmti e". Die Frage ist wieso? Ob ich einen das int in einer int variable zwischenspeichere oder nicht sollte doch kein unterschied sein, so dachte ich zumindest.
Danke für die schnelle Antwort. Selbiges ist doch aber hier der Fall:
Java:
while ((in.read()) != -1) {
out.write(in.read());
}
Ich lese ein Zeichen, teste, ob es -1 entspricht, falls nicht, schreibe ich es. Ich speichere es nur nicht zwischen. Könntest Du mir einmal den Prozess erklären? Es kann gut sein, dass ich gerade eine simple Sache nicht nachvollziehen kann oder bin einfach auf dem falschen Fuß.
LG
P.S. bist du zufälligerweise der "Gucky" aus einem anderen Forum der ein HUD entwickelt hat?
Ahhh, ich glaube ich habe es endlich verstanden . Ich lese gleich 2 Zeichen in dem ersten Schleifendurchgang, da die Methode read() mir natürlich das nächste und nicht das aktuelle Zeichen ausgibt. Nach ein paar Minuten überlegen und immer wieder anschauen des Satzes den du geschrieben hast, ist es mir endlich aufgefallen. So simpel und doch so kompliziert .