2016-10-02 113 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的输入......非常奇怪 –

相关问题