【问题标题】:How to specify which file to write to?如何指定写入哪个文件?
【发布时间】:2014-12-01 05:42:23
【问题描述】:

我正在创建一个接受用户输入 currentSales 的程序,如果它小于 1000 则转到 lowPerformer 或超过 1000 转到 highPerformer.txt 文件。我被困在 if 语句中。我不确定如何编写程序来告诉数据要保存到哪个文件。感谢您提供任何帮助。

public class HighandLowSales {
   public static void main(String[] args) {
      Scanner input1 = new Scanner(System.in);
      Path highPerformer =
              Paths.get("C:\\Users\\C\\Desktop\\IS103 "
                      + "Programming Logic\\Week7\\HighSales.txt");
      Path lowPerformer = 
              Paths.get("C:\\Users\\C\\Desktop\\IS103 Programming Logic\\"
                      + "Week7\\LowSales.txt");
      String delimiter = ",";
      String s;
      int id;
      String firstName;
      String lastName;

      double currentSales;
      final int QUIT = 999;
      try {
         Scanner input = new Scanner(System.in);
         OutputStream output = 
            new BufferedOutputStream(Files.newOutputStream(highPerformer, CREATE));
         OutputStream output1 =
            new BufferedOutputStream(Files.newOutputStream(lowPerformer, CREATE));

         BufferedWriter writer = 
            new BufferedWriter(new OutputStreamWriter(output));
         BufferedWriter writer1 = 
            new BufferedWriter(new OutputStreamWriter(output1));

         System.out.print("Enter employee ID number >> ");
         id = input.nextInt();
         while(id != QUIT) {
            System.out.print("Enter first name for employee #" + 
                             id + " >> ");
            input.nextLine();
            firstName = input.nextLine();
            System.out.print("Enter last name for employee # " +
                             id + " >> ");
            input.nextLine();
            lastName = input.nextLine();
            System.out.print("Enter current month sales in whole dollar " +
                             "for employee #" + id + " >> ");
            input.nextLine();
            currentSales = input.nextDouble();
            s = id + delimiter + firstName + delimiter + lastName + delimiter
                            + currentSales;

            if (currentSales>1000) 
               writer.write(s);


            writer.newLine();
            writer1.newLine();
            System.out.print("Enter next ID number or " + QUIT +
                             "to quit");
            id = input.nextInt();
         }
         writer.close();

      } catch(Exception e) {
         System.out.println("Message: " + e);
      }          
   }          
}

【问题讨论】:

  • 你每次都向 writer 添加一个新行,但从不向 writer1 添加一个新行。您应该在所有 if 和 else 周围添加大括号,然后查看它是否有效。
  • @AngeloNeuschitzer 我已经进行了更新,但它无法正常工作。
  • 我看对了吗,您接受了一个“正确”的答案,将回答者代码包含在您的问题中,然后尝试一下?那不会很好用 :) 请将原始代码保留在其中(格式化除外,请在任何地方再次发布代码之前修复它)。否则你得到的回答者不再有效,这使他们变得糟糕,这不是他们自己的过错。
  • 您应该查看“try-with-resources”,这样您就可以跳过关闭语句。
  • 尝试添加“writer.flush(); writer1.flush();”直接在关闭语句之前。 (同时添加 writer1.close();)

标签: java if-statement java-io


【解决方案1】:
if(currentSales>1000){
    //write to high performer file
    writer.write(s);
} else {
    //write to low performer file
    writer1.write(s);
}

【讨论】:

  • 你把评论放在哪里 //write to high performer file 这是我不太理解的代码。我会在那里写什么。
  • 那是您将写入文件的代码放在此处...在您的情况下 writer.write(s);对于高绩效者和 writer1.write(s);低绩效者
  • 谢谢。不确定你是否知道这一点。知道为什么路径不能转换为布尔值吗?
  • 好吧,布尔值是一个真|假值...这是一个信息位,路径不适合布尔值...您可能可以创建一个返回基于布尔值的方法在您要对其进行测试的路径的某些状态上。
猜你喜欢
  • 2019-11-26
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多