【问题标题】:User input into a text file in java用户在java中输入文本文件
【发布时间】:2017-02-10 06:51:34
【问题描述】:

我希望用户能够将多行文本复制并粘贴到控制台中,然后将其保存到特定的文本文件(本例中为“weather.text”,该文件位于同一包内的数据文件夹中)。我已经为这个简单的任务工作了几个小时,但解决方案正在逃避我。我是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) 正在保存的文本文件在全局项目文件夹中,而不是指定的数据子文件夹中。

感谢任何帮助或建议。谢谢。

【问题讨论】:

  • 不是 Ctrl + z 只是“撤消”吗?还是它以某种方式将所有内容放在一条线上? br.readLine() 只读取一行。
  • 我的教授说要使用 ctr + z “让扫描仪在创建文本文件时将数据读入文件”。我更喜欢图形界面,但我们的课程还没有那么先进。现在我正在用我的头撞到命令行来锻炼。

标签: java io bufferedreader writer reader


【解决方案1】:

你正在写 str,但 str 只是 br 中的第一行你必须在一个循环中读取所有行。

试试这个代码:

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

关于第二个问题,文件写在你应用的工作目录中。

【讨论】:

  • 我明白你的意思,但这并不完全有效。我将您的 while 语句拼写错误更改为:while(br.readLine()!=null),但这根本不再存储输入。
  • 对不起,我添加了缺少的括号。
  • 这种方法有效。我添加了一条我以为你不见了的行。 str = br.readline();在 writer.println(str); 之前现在它似乎存储了 1/3 的输入......非常奇怪
  • @Andrew 那里没有缺行。没错。
猜你喜欢
  • 1970-01-01
  • 2011-09-09
  • 2020-09-19
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
相关资源
最近更新 更多