在 txt.file 中存储用户输入的问题

Issues with storing user input in txt.file

我需要有关以下代码的帮助 - 本质上,我正在尝试做的是不断提示用户输入数字,直到他们输入 "Done" 完成,然后提示用户输入文件名,以便这些值可以保存到那个文件。例如,如果用户输入 "output.txt",那么程序应该将读取到的数字写入 "output.txt"。

这是我目前所拥有的:

public static void main(String[] args) {

try{
    FileWriter file= new FileWriter("filename.txt");

    Scanner input= new Scanner(System.in);

    boolean done= false;

do{
    System.out.println("Enter a number");
    String value= input.nextLine();
        if (value.equalsIgnoreCase("done")){
            done=true;

            Scanner input1= new Scanner(System.in);
            System.out.println("What is the filename?");
            String filename1= input1.next();
            FileWriter finalFile = new FileWriter(filename1);


          } else {
            try{
                double number= Double.parseDouble(value);

                file.write(number+ "\n");
                file.flush();
              }
              catch (NumberFormatException fnfe) {
              System.out.println("Not valid");
            }

          }
        } while(!done);
          input.close();
          file.close();
          System.out.println("Success");

        }
        catch (IOException ioe){
          System.out.println(ioe.toString());
        }   


}

}       

下面的代码输出两个文件,一个文本文件 (filename.txt) 和另一个由用户适当命名的文件。我怎样才能解决这个问题?应该只有一个输出。

如有任何建议,我们将不胜感激!

你可以...

将用户输入的值存储在某种列表中。由于输入的值数量是任意的,您可能需要使用类似 ArrayList 的东西,因为它提供了动态大小

Scanner input = new Scanner(System.in);
List<Double> numbers = new ArrayList<Double>(25);
boolean done = false;
do {
    System.out.println("Enter a number");
    String value = input.nextLine();
    done = value.equalsIgnoreCase("done");
    if (!done) {
        try {
            double number = Double.parseDouble(value);
            numbers.add(number);
        } catch (NumberFormatException fnfe) {
            System.out.println("Not valid");
        }

    }
} while (!done);

System.out.println("What is the filename?");
String filename1 = input.nextLine();
try (BufferedWriter finalFile = new BufferedWriter(new FileWriter(filename1))) {
    for (double number : numbers) {
        finalFile.write(Double.toString(number));
        finalFile.newLine();
    }
} catch (IOException ex) {
    ex.printStackTrace();
}

或者你可以...

如果您无法使用某种 List,您需要先提示用户输入文件名,然后在他们输入时写出值...

    Scanner input = new Scanner(System.in);

    System.out.println("What is the filename?");
    String filename1 = input.nextLine();
    try (BufferedWriter finalFile = new BufferedWriter(new FileWriter(filename1))) {
        boolean done = false;
        do {
            System.out.println("Enter a number");
            String value = input.nextLine();
            done = value.equalsIgnoreCase("done");
            if (!done) {
                try {
                    double number = Double.parseDouble(value);
                    finalFile.write(Double.toString(number));
                    finalFile.newLine();
                } catch (NumberFormatException fnfe) {
                    System.out.println("Not valid");
                }

            }
        } while (!done);
    } catch (IOException ex) {
        ex.printStackTrace();
    }

您的代码的作用:为文件 "filename.txt" 创建一个 FileWriter 并添加用户输入的数字。当用户在命令行中输入 done 时,要求他提供文件名并为该文件创建一个新的 FileWriter,但不要向其中写入任何内容。然后关闭第一个FileWriter。

你想要什么:查询用户的值,以某种方式存储它们,询问文件位置,将值保存到文件位置。

这应该可以完成工作:

try (Scanner input = new Scanner(System.in))
{
    List<Double> numbers = new ArrayList<>();

    // Query user for numbers.
    boolean done = false;
    do
    {
        System.out.println("Enter a number: ");
        String value = input.nextLine();

        if (value.equalsIgnoreCase("done"))
        {
            done = true;
        }
        else
        {
            try
            {
                double number = Double.parseDouble(value);
                numbers.add(number);
            }
            catch (NumberFormatException fnfe)
            {
                System.out.println("Not valid");
            }
        }
    }
    while (!done);

    // Prompt the user for the file name. If the user just presses enter, reprompt >:-(
    String fileName;
    do
    {
        System.out.println("Specify a filename: ");
        fileName = input.nextLine();
    }
    while (fileName.isEmpty());

    try (PrintStream ps = new PrintStream(fileName))
    {
        for (Double number : numbers)
        {
            ps.print(number);
            ps.println();
        }
    }
    System.out.println("Success");
}
catch (IOException ioe)
{
    ioe.printStackTrace();
}