2016-10-02 2 views
0

Ich möchte ein Benutzer in der Lage sein, mehrzeiligen Text in die Konsole zu kopieren und einzufügen und dann in einer bestimmten Textdatei (in diesem Fall "weather.text") zu speichern in einem Datenordner innerhalb des gleichen Pakets). Ich habe für ein paar Stunden an dieser einfachen Aufgabe gearbeitet und die Lösung entzieht sich mir. Ich bin neu in Java, also entschuldige ich mich im Voraus.Benutzereingabe in eine Textdatei in Java

Diese statische Funktion wird von der Hauptstartprogrammklasse aufgerufen.

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.io.Reader; 
import java.util.Scanner; 

    public static void writeFile() 
    { 
     //set up for the user input 
     Reader r = new InputStreamReader(System.in); 
     BufferedReader br = new BufferedReader(r); 
     String str = null; 

     try { 
       //prompt the user to input data 
       System.out.println("Type or paste your data and hit Ctrl + z"); 
       str = br.readLine(); 

       //save the user input data to text file 
       PrintWriter writer = new PrintWriter("weather.txt", "UTF-8"); 
       writer.print(str); 
       writer.close(); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

    } 

derzeit habe ich 2 Probleme.

1) Der obige Code scheint nur die erste in die Konsole eingefügte Zeile in der Konsole zu speichern.

2) Die zu speichernde Textdatei befindet sich im globalen Projektordner und nicht im angegebenen Datenunterordner.

Jede Hilfe oder Vorschläge sind willkommen. Vielen Dank.

+0

Ist nicht Strg + z nur "rückgängig machen"? Oder bringt es irgendwie alles auf eine Linie? 'br.readLine()' liest nur eine einzelne Zeile. – 4castle

+0

@ 4castle http://superuser.com/questions/476873/what-is-effect-of-ctrl-z-on-a-unix-linux-application – Murillio4

+0

mein Professor sagte, ctr + z zu verwenden, um den Scanner zu erhalten Lesen Sie die Daten in die Datei, während Sie die Textdatei erstellen ". Ich würde eher eine grafische Oberfläche bevorzugen, aber wir sind noch nicht so weit fortgeschritten in unserem Lehrplan. Für den Moment hämmere ich meinen Kopf gegen die Befehlszeile für Übung. –

Antwort

1

Sie schreiben str, aber str ist nur die erste Zeile in br Sie müssen alle Zeilen in einer Schleife lesen.

diesen Code Versuchen:

public static void writeFile() 
{ 
    //set up for the user input 
    Reader r = new InputStreamReader(System.in); 
    BufferedReader br = new BufferedReader(r); 
    String str = null; 

    try { 
      //prompt the user to input data 
      System.out.println("Type or paste your data and hit Ctrl + z"); 
      PrintWriter writer = new PrintWriter("weather.txt", "UTF-8"); 
      while((str = br.readLine())!=null) 
      { 
      //save the line 

      writer.println(str); 
      } 
      writer.close(); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

um die zweite Ausgabe, die Datei im Arbeitsverzeichnis der Anwendung geschrieben wird.

+0

Ich sehe, was Sie bekommen, aber das funktioniert nicht ganz. Ich habe Ihren while-Statement-Tipp auf: while (br.readLine()! = Null) geändert, aber das speichert die Eingabe überhaupt nicht mehr. –

+0

Entschuldigung, ich habe die fehlende Klammer hinzugefügt. – SorMun

+0

dieser sorta funktioniert. Ich fügte eine Zeile hinzu, von der ich dachte, dass sie fehlte. str = br.readline(); Das geht direkt vor writer.println (str); Jetzt scheint es 1/3 der Eingabe zu speichern ... sehr merkwürdig –

Verwandte Themen