2016-06-21 26 views
-1

Als Amateur-Java-Lerner habe ich verschiedene Kombinationen von Java-Datei und I/O-Methoden ausprobiert, als ich diesen Code ausprobierte, wo ich drucken wollte, was ich in die Datei tom.txt über meinen Code eingegeben habe (ich verstehe was ich will könnte leicht mit anderen Methoden durchgeführt werden), war mein Code folgendermaßen aus:Warum kann ich das ganze Zeichen nicht so drucken, wie ich es eingegeben habe?

import java.io.*; 
public class Dhoom3 
{ 
public static void main(String[] args) throws IOException, NullPointerException 
{ 
    FileWriter b = new FileWriter(new File("tom.txt")); 
    System.out.println(" enter whatever : "); 
    b.write(System.in.read()); 
    b.flush(); 
    System.out.println("the printed characters are"); 
    FileInputStream r = new FileInputStream("tom.txt"); 
    BufferedInputStream k = new BufferedInputStream(r); 
    int g; 
    while((g = k.read())!= -1) 
    { 
     System.out.println((char)g); 
    } 
} 

} 

meine Ausgabe war dieses:

enter whatever : 
stack 
the printed characters are 
s 

, wo ich meinen Fehler begangen hat, oder wo soll ich mein Programm ändern, grundsätzlich Warum druckt mein Code nur das erste Zeichen?

+0

Sie sind nur Lesen eines Zeichens aus dem Systemeingang, was in die Datei geschrieben wird (Sie können einen "Scanner" für Ihre Bequemlichkeit verwenden). – Mena

+0

@Mena gut, wie soll ich es ändern? Könntest du einen Weg vorschlagen? –

+0

@Mena so read() -Methode liest nur ein Zeichen nach dem anderen? gut, wenn ich noch read() Methode für System-Eingabe verwenden möchte, wie wenn ich für oder while-Schleife kann es geändert werden? –

Antwort

1

ist Ihr Fehler

System.in.read() 

mit Eingang zu lesen.

System.in.read liest nur ein Byte der Eingabe.

Die bessere Alternative dazu ist die Verwendung von Scannern. Scanner können mehrere Informationsbytes scannen, sodass sie besser für das sind, was Sie tun.

Code zu beheben:

1) Objekt einen neuen Scanner erstellen wie folgt:

Scanner scanner = new Scanner(System.in); 

2) ersetzen System.in.read mit:

scanner.next()