2016-10-02 2 views
0

Je souhaite qu'un utilisateur puisse copier et coller du texte multiligne dans la console, puis l'enregistrer dans un fichier texte spécifique ("weather.text" dans ce cas) dans un dossier de données dans le même paquet). J'ai travaillé sur cette tâche simple pendant quelques heures et la solution m'évite. Je suis nouveau à Java alors je m'excuse d'avance.Entrée de l'utilisateur dans un fichier texte en Java

Cette fonction statique est appelée à partir de la classe du lanceur principal.

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(); 
     } 

    } 

Actuellement, je rencontre 2 problèmes.

1) Le code ci-dessus semble enregistrer uniquement la première ligne collée dans la console dans la console.

2) Le fichier texte en cours d'enregistrement se trouve dans le dossier de projet global et non dans le sous-dossier de données spécifié.

Toute aide ou suggestion est appréciée. Je vous remercie.

+0

Est-ce que Ctrl + z n'est pas juste "annuler"? Ou est-ce en quelque sorte tout mettre sur une ligne? 'br.readLine()' ne lit qu'une seule ligne. – 4castle

+0

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

+0

mon professeur a dit d'utiliser ctr + z "pour obtenir le scanner lire les données dans le fichier lors de la création du fichier texte ". Je préfère de loin une interface graphique, mais nous ne sommes pas encore avancés dans notre programme. Pour l'instant, je me bats la tête contre la ligne de commande pour l'exercice. –

Répondre

1

Vous écrivez str, mais str est juste la première ligne de br Vous devez lire toutes les lignes dans une boucle.

Essayez ce code:

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(); 
    } 
} 

au sujet de la deuxième question, le fichier est écrit dans le répertoire de travail de votre application.

+0

Je vois ce que vous voulez dire, mais cela ne marche pas vraiment. J'ai changé la frappe de votre instruction while en: while (br.readLine()! = Null), mais cela ne stocke plus du tout l'entrée. –

+0

Désolé, j'ai ajouté la parenthèse manquante. – SorMun

+0

ce sorta fonctionne. J'ai ajouté une ligne je pensais que vous étiez absent. str = br.readline(); qui va juste avant writer.println (str); Il semble maintenant stocker 1/3 de l'entrée ... très étrange –