2016-10-02 47 views
0

我希望用戶能夠將多行文本複製並粘貼到控制檯中,然後將其保存到特定的文本文件(本例中爲「weather.text」)在相同包中的數據文件夾中)。我一直在做這個簡單的任務幾個小時,解決方案正在逃避我。我是新來的java,所以我提前道歉。將用戶輸入到java中的文本文件中

這個靜態函數是從主啓動類調用的。

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

    } 

當前我遇到2個問題。

1)上面的代碼似乎只保存粘貼到控制檯的第一行到控制檯。

2)保存的文本文件位於全局項目文件夾中,而不是指定的數據子文件夾。

任何幫助或建議表示讚賞。謝謝。

+0

是不是Ctrl + z只是「撤消」?或者它以某種方式將所有內容放在一行上? 'br.readLine()'只讀取一行。 – 4castle

+0

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

+0

我的教授說要用ctr + z來得到掃描儀在創建文本文件時將數據讀入文件「。我更願意使用圖形界面,但我們的課程並沒有那麼先進。現在,我正在爲了鍛鍊而對命令行感到頭痛。 –

回答

1

你正在寫str,但是str只是第一行你必須讀取循環中的所有行。

試試這個代碼:

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

關於第二個問題,該文件是寫在你的應用程序的工作目錄。

+0

我明白你在做什麼,但這並不奏效。我將你的while語句錯別字改爲:while(br.readLine()!= null),但是它不再存儲輸入。 –

+0

對不起,我添加了缺少的括號。 – SorMun

+0

這種類型的作品。我添加了一條我以爲你失蹤的線路。 str = br.readline();它正好在writer.println(str)之前;現在它似乎存儲了1/3的輸入......非常奇怪 –

相關問題