【问题标题】:Issues with storing user input in txt.file [duplicate]将用户输入存储在 txt.file 中的问题 [重复]
【发布时间】:2018-07-22 01:30:01
【问题描述】:

我需要以下代码的帮助-基本上我要做的是不断提示用户输入数字,直到他们输入“完成”完成,然后提示用户输入文件名,以便可以将这些值保存到那个文件。例如,如果用户输入“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),另一个是由用户适当命名的文件。我怎样才能解决这个问题?应该只有一个输出。

任何建议将不胜感激!

【问题讨论】:

  • 那么,如果我没看错的话,您想提示用户输入任意数量的数字,直到他们输入"done",然后将这些值写入文件?如果是这样,您需要以某种方式存储值,直到用户输入 "done",请求文件名然后写入数字,或者您需要先获取文件名
  • 数字存储在通用命名文件“filename.txt”中。见上面的评论;先询问文件名,而不是事后重命名该文件。

标签: java try-catch java.util.scanner filewriter


【解决方案1】:

你可以...

将用户输入的值存储在某种列表中。由于输入的值的数量是任意的,您可能需要使用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();
    }

【讨论】:

    【解决方案2】:

    您的代码的作用:为文件“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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多