write(), weshalb verschiedene Ausgaben?

SuperMario

Mitglied
Hallo,

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 im voraus!
 

Gucky

Top Contributor
Du ließt ein Zeichen ein, testest, ob es -1 entspricht, ließt dann ein Weiteres ein und schreibst es.

Java:
int read;
while ((read = in.read()) != -1){
  out.write(read);
}
 

SuperMario

Mitglied
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?
 
Zuletzt bearbeitet:

Gucky

Top Contributor
Ne du. Das bin ich nicht. :D

Zähl mal die Aufrufe von read() ;)
Du ließt eins, testest ob es == -1 ist, ließt noch eins und schreibst das zweite Zeichen.
 

SuperMario

Mitglied
Ahhh, ich glaube ich habe es endlich verstanden :D. 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 :D.

Vielen Dank!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Instance methods should not write to "static" fields Java Basics - Anfänger-Themen 4
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
K exec.StdIn.Write Java Basics - Anfänger-Themen 7
B Input/Output Socket I/O - outputStream.write(-1) Java Basics - Anfänger-Themen 2
X write() und Zufallszahlen Java Basics - Anfänger-Themen 2
K Input/Output read/write Java Basics - Anfänger-Themen 15
J FileOutputStream write Java Basics - Anfänger-Themen 19
Corben Input/Output FileOutputStream - neue Zeile mit write(10) Java Basics - Anfänger-Themen 6
F FileOutputStream.write Java Basics - Anfänger-Themen 2
M Unterschied append / write aus der Klasse Writer Java Basics - Anfänger-Themen 2
W file read write crash Java Basics - Anfänger-Themen 2
M Audio Stream läuft auf :connection abort: socket write error Java Basics - Anfänger-Themen 2
M Pfad angabe bei getRescource und ImageIO.write Java Basics - Anfänger-Themen 4
hdi Datentypen FileOutputStream#write(int) mit ints? Java Basics - Anfänger-Themen 5
G ImageIO.write() Java Basics - Anfänger-Themen 2
M Streams, read and write Java Basics - Anfänger-Themen 2
I ImageIO.write(bild, "was gibts da alles", pfad); Java Basics - Anfänger-Themen 6
D FileWriter write? Zeilenumbruch ? Java Basics - Anfänger-Themen 4
S Technik hinter der write Methode Java Basics - Anfänger-Themen 5
C write Java Basics - Anfänger-Themen 3
S Inhalt aus Array auf JSP anzeigen mit bean:write Java Basics - Anfänger-Themen 2
F javax.imageio.ImageIO write methode Java Basics - Anfänger-Themen 11
I 2 verschiedene Klassen mit gleichen Property vergleichen Java Basics - Anfänger-Themen 13
N Verschiedene Konstruktoren mit gleichen Datentypen Java Basics - Anfänger-Themen 8
Buroto Threads Verschiedene .txt Dateien Auf Listen und Verbinden Java Basics - Anfänger-Themen 3
S OOP Java Eingabe in verschiedene Datenbank Tabellen eintragen Java Basics - Anfänger-Themen 7
I SWT Plattformunabhängig laden - verschiedene SWT .jar laden Java Basics - Anfänger-Themen 0
T Java FXML selbes Fenster verschiedene Stellen im Programm Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
K verschiedene Eingaben sortieren Java Basics - Anfänger-Themen 6
W Verschiedene Methoden in einer Klasse in der Main aufrufen? Java Basics - Anfänger-Themen 8
W n verschiedene Arrays zufällig ausgeben - mit der Random-Klasse? Java Basics - Anfänger-Themen 8
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
T for-each-Schleife, verschiedene Datentypen Java Basics - Anfänger-Themen 1
HoT verschiedene ArrayLists mit ähnlichem Namen in for-Schleife aufrufen Java Basics - Anfänger-Themen 3
FelixN Array mit verschiedene Datentypen als Rückgabewert? (Long und Double) Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Attribute für vererbte Klassen Java Basics - Anfänger-Themen 4
M JavaFX- Verschiedene Stages Java Basics - Anfänger-Themen 1
B Get / Set - Methode für verschiedene Entities? (generisch) Java Basics - Anfänger-Themen 21
L Wie Input auf verschiedene Kriterien hin überprüfen? Java Basics - Anfänger-Themen 3
T Vererbung Verschiedene Fahrzeugtypen mit unterschiedlicher Ausgabe Java Basics - Anfänger-Themen 17
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
F Komplexe Zahlen auf verschiedene Weise addieren Java Basics - Anfänger-Themen 18
N verschiedene Reihenfolgen ausgeben Java Basics - Anfänger-Themen 15
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
Java The Hutt SetWerte über verschiedene Klassen Java Basics - Anfänger-Themen 16
M Verschiedene Eingabe = Verschiedene Ausgaben Java Basics - Anfänger-Themen 5
M Erste Schritte Mit Variable verschiedene Texte in Textfeld einfügen Java Basics - Anfänger-Themen 27
T Datentypen Kann Java 2 verschiedene Datentypen vergleichen? Java Basics - Anfänger-Themen 2
B String auseinander nehmen in verschiedene Teile Java Basics - Anfänger-Themen 9
X Variablen Problem bei Aufteilung in verschiedene Class-Files Java Basics - Anfänger-Themen 4
E JAvaFX: Verschiedene Panels nach Klick auf Node des TreeView anzeigen Java Basics - Anfänger-Themen 0
T Java verschiedene Anweisungen Java Basics - Anfänger-Themen 23
W Verschiedene Bibliotheken in einer Anwendung? Java Basics - Anfänger-Themen 2
tuc Erste Schritte verschiedene objekte in einem feld speichern Java Basics - Anfänger-Themen 4
L Verschiedene Bilder per Knopfdruck anzeigen lassen Java Basics - Anfänger-Themen 17
J ArrayList über verschiedene Klassen verwenden Java Basics - Anfänger-Themen 7
P Erste Schritte durch MenuBar verschiedene Fenster öffnen Java Basics - Anfänger-Themen 2
G Datentypen verschiedene Objekte in eine ArrayList, Generics Java Basics - Anfänger-Themen 2
GoldenShadow Input/Output Verschiedene Versionen von Input/Output Java Basics - Anfänger-Themen 3
I Drucken in Java / verschiedene Papierformate Java Basics - Anfänger-Themen 0
P Verschiedene Java Versionen nutzen Java Basics - Anfänger-Themen 6
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
E Erste Schritte Verschiedene Anfängerfragen (Rekursion, Terminierung, Schleife, etc.) Java Basics - Anfänger-Themen 5
I String trennen und verschiedene Wörter holen Java Basics - Anfänger-Themen 6
B Verschiedene Objekte in 2 dimensionalem Array speichern Java Basics - Anfänger-Themen 10
S Datei ausführen, verschiedene Ordner Java Basics - Anfänger-Themen 2
O Verschiedene Farben in einer GUI Java Basics - Anfänger-Themen 15
R Klassen Mehrere/Verschiedene Objekte umcasten Java Basics - Anfänger-Themen 8
N Vererbung Verschiedene Subclasses nach cast zur Superclass unterscheiden Java Basics - Anfänger-Themen 9
D Verschiedene Fragen zu meinem Projekt Java Basics - Anfänger-Themen 6
S textPane verschiedene formatierungen Java Basics - Anfänger-Themen 8
K Verschiedene JDK´s paralell nutzen? Java Basics - Anfänger-Themen 3
M Verschiedene Möglichkeiten mit 'equals' abdecken? Java Basics - Anfänger-Themen 9
H 2 verschiedene Objekte in Liste mit Compareable sortieren Java Basics - Anfänger-Themen 7
G Erste Schritte Über verschiedene Datentypen iterieren. Gibt es sowas? Java Basics - Anfänger-Themen 19
N Verschiedene Klassen als Parameter elegant übergeben? Java Basics - Anfänger-Themen 4
X Listen und verschiedene Methoden Java Basics - Anfänger-Themen 6
B Zwei verschiedene Daten vergleich Java Basics - Anfänger-Themen 2
K Input/Output Verschiedene Ordner für Java u.v.m. Projekte Java Basics - Anfänger-Themen 3
G Umwandlung in verschiedene Zahlensysteme Java Basics - Anfänger-Themen 4
R Verschiedene Jar Versionen nutzen Java Basics - Anfänger-Themen 14
D Umgebungsvariable verschiedene Werte von JAVA_HOME? Java Basics - Anfänger-Themen 4
J verschiedene Anweisungen bei verschiedenen Zuständen Java Basics - Anfänger-Themen 9
F Info zwischen verschiedene Klassen austauschen Java Basics - Anfänger-Themen 4
R Input/Output verschiedene Datentypen als Bytes in Datei speichern Java Basics - Anfänger-Themen 15
Blindxantos Klassen in verschiedene Packages unterteilen Java Basics - Anfänger-Themen 2
F verschiedene Daten abspeichern Java Basics - Anfänger-Themen 13
N Verschiedene JFrames in einem JFrame anzeigen Java Basics - Anfänger-Themen 7
A Datentypen Verschiedene Threads synchronisieren Java Basics - Anfänger-Themen 3
D Mehrere verschiedene Farben pro fillRect Java Basics - Anfänger-Themen 3
M Verschiedene Werte in methoden Java Basics - Anfänger-Themen 3
K Verschiedene (Thread) Objekt-Positionen (int) in einem Array zusammenfassen Java Basics - Anfänger-Themen 3
J Verschiedene Rückgabetypen(int int char) Java Basics - Anfänger-Themen 10
S Datentypen Die verschiedene Java Datentypen [Anfänger] Java Basics - Anfänger-Themen 8
J OOP verschiedene Objekttypen ablegen Java Basics - Anfänger-Themen 4
B Welcher Feld Typ für verschiedene Datentypen? Java Basics - Anfänger-Themen 4
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
S Verschiedene Arrays über Index aufrufen Java Basics - Anfänger-Themen 5
Developer_X in JEditorPane verschiedene Farben, verwenden Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben