Создание выходного файла на java

Таким образом, я закончил около 90% этого кода, но я застрял на последней части. Поэтому в значительной степени я хочу сохранить partNumber, quantity и toalCost из моего MainClass в мой OrdersProcessed класс и сделать outputfile. Как мне это сделать? Это учебник, который я опубликовал с моим кодом, хороший способ сделать это?

MainClass:

import java.util.Scanner;

public class MainClass
{

    private static final String DATA_FILE = "masterInventory.dat";
    private static Scanner input = new Scanner(System.in);

    public static void main(String[] args)
    {
        InventoryData myData;
        double price = 0.0;
        int quantity = 0;
        double totalCost = 0.0;
        int index = 0;
        int partNumber = 0;
        char runProgram;
        int totalFound;
        int partFound = 0;
        int partnotFound = 0;

        myData = new InventoryData(DATA_FILE);
        myData.loadArrays();
        myData.bubbleSort();

        System.out.println("Do you want to continue? prss 'Y' for yes or 'Q' to quit");
                runProgram = input.nextLine().charAt(0);
                runProgram = Character.toUpperCase(runProgram);


                while (runProgram == 'Y' || runProgram == 'Q')
                {

                    if(runProgram == 'Y')
                    {

                        System.out.print("Please enter your part number: "); 
                        partNumber = input.nextInt();

                        // TODO start your loop here

                        index = myData.binSearch(partNumber);

                        if(index != -1)
                        {
                            price = myData.getPrice(index);
                            System.out.printf("The price is %.2f%n", price);
                            System.out.print("How many would you like?");
                            quantity = input.nextInt();
                            totalCost = price * quantity;
                            partFound++;

                            // TODO do printing, writing to file here
                        }
                        else
                        {
                            System.out.println("Part not found");
                            partnotFound++;
                        }

                        System.out.println("Part# ");
                        System.out.print(partNumber);
                        System.out.println();

                        System.out.println("Price $");
                        System.out.print(price);
                        System.out.println();

                        System.out.println("Quantity ");
                        System.out.print(quantity);
                        System.out.println();

                        System.out.println("totalPrice ");
                        System.out.print(totalCost);
                        System.out.println();

                        System.out.println("Do you want to continue? prss 'Y' for yes or 'Q' to quit");
                        runProgram = input.next().charAt(0);
                        runProgram = Character.toUpperCase(runProgram);

                    }
                    if (runProgram == 'Q')
                    {
                        totalFound = partFound + partnotFound;

                        System.out.println("Total parts found : " + partFound);
                        System.out.println("Total parts not found : " + partnotFound);
                        System.out.println("Total parts searched : " + totalFound);

                        break;
                    }// end if 'Q'
                }// end while
    }
}

Класс OrderProcessed:

public class OrdersProcessed
{





    public OrdersProcessed(String File)
    {
        File = "ordersProcessed.dat";
    }


    public void saveOneRecord()
    {

    }

Тогда вот учебник, который я нашел:

public static void main(String[] args) 
{
    String lastName, firstName;
    double salary;

    try
    {
        //Instantiate a PrintWriter to append to an existing file
        PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true));
        Scanner myScanner = new Scanner (System.in);

        //Input first value for lastName, which will be the LCV
        System.out.println("Input the employee's last name (or Q to quit): ");
        lastName = myScanner.nextLine();

        while (!(lastName.equals("Q") || lastName.equals("q")))
        {
            System.out.println("Input the employee's first name: ");
            firstName = myScanner.nextLine();
            System.out.println("Input the employee's salary: ");
            salary = myScanner.nextDouble();
            myScanner.nextLine();   //Eliminate carriage return left in stream after numeric input

            //Save one record
myPW.printf ("%s %s %.2fn", lastName, firstName, salary);

            //Input next last name
            System.out.println("Input the employee's last name (or Q to quit): ");
            lastName = myScanner.nextLine();
        }//END while

        myPW.close();
        myScanner.close();

    }//END try
    catch (IOException ex)
    {
        ex.printStackTrace();
    }
}//END main method

3 ответа

  1. Сначала я думал, что вы хотите сохранить partNumber, quantity и totalCost в файле, и код ниже должен это сделать:

    PrintWriter writer = new PrintWriter("file_name.txt", "UTF-8");
    writer.println(partNumber);
    writer.println(quantity);
    writer.println(toalCost);
    writer.close();
    

    Но похоже, что вы хотите сохранить partNumber, quantity и totalCost в классе OrdersProcessed и сохранить его в файле.

    Итак, сначала сделайте свой класс OrdersProcessed Сериализуемым:

    public class OrdersProcessed implements Serializable {
    

    Добавление переменных экземпляра в класс OrdersProcessed с помощью методов setter:

    int quantity = 0;
    int partNumber = 0;
    double totalCost = 0.0;
    

    Добавьте следующее В метод saveOneRecord:

      try
      {
         FileOutputStream fileOut = new FileOutputStream("ordersProcessed.dat");
         ObjectOutputStream out = new ObjectOutputStream(fileOut);
         out.writeObject(e);
         out.close();
         fileOut.close();
      } catch(IOException e)
      {
          e.printStackTrace();
      }
    

    Затем добавьте следующее ниже вашего » / / TODO do printing, writing to file here»:

    OrdersProcessed op = new OrdersProcessed();
    op.setQuantity(quantity);
    op.setPartNumber(partNumber);
    op.setTotalCost(totalCost);
    op.saveOneRecord();
    

    Подробнее о сериализации здесь .

  2. Учебник, который вы предоставили, действительно показывает простой способ записи в файл.

    Как вы можете видеть, Вам нужно будет создать объект PrintWriter (убедитесь, что файл существует):

    PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true));
    

    Затем можно использовать printf для печати нескольких значений в одной строке.

    myPW.printf ("%s %s %.2f\n", lastName, firstName, salary);
    

    Вы можете использовать его в любом месте, если у вас есть доступ к модулю записи и нужным значениям. Выше, 3 значения-lastName, firstName и зарплата, и они добавляются вместо %sand %.2fbits в первом аргументе"%s %s %.2f\n", где %smeans помещают значение как строку, а %.2fmeans помещают значение как поплавок до 2 десятичных знаков. Вы можете добавить столько, сколько хотите. Дополнительные сведения об этом см. В документах Java: https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html#printf(java.lang.String,%20java.lang.Object…)

    Наконец, необходимо закрыть объект PrintWriter:

    myPW.close();
    

    Вероятно, вам придется окружить эти операции инструкцией try/catch, ищущей исключение IOException.

  3. Я не вижу проблемы в том, как вы это сделали, но я вижу, как вы можете сделать свой код немного чище. Вы не сказали, что у вас были какие-либо ошибки, поэтому я предполагаю, что это работает правильно.

    Я удалил некоторые ненужные вещи из вашего кода и протестировал его. Все работает

        public static void main(String[] args) 
        {
        String lastName = new String(), firstName;//Initialized lastName to prevent an error
        double salary;
    
        try
        {
            //Instantiate a PrintWriter to append to an existing file
            PrintWriter myPW = new PrintWriter (new FileWriter("employeeOut.dat", true));
            Scanner myScanner = new Scanner (System.in);
    
            //put all inputs inside the loop
    
            while (!(lastName.equals("Q") || lastName.equals("q")))
            {
                System.out.println("Input the employee's last name (or Q to quit): ");
                lastName = myScanner.nextLine();
                System.out.println("Input the employee's first name: ");
                firstName = myScanner.nextLine();
                System.out.println("Input the employee's salary: ");
                salary = myScanner.nextDouble();
                myScanner.nextLine();   //Eliminate carriage return left in stream after numeric input
    
                //Save one record
                myPW.printf ("%s %s %.2f\n", lastName, firstName, salary);
    
               //loops back to last name now
    
            }//END while
    
            myPW.close();
            myScanner.close();
    
        }//END try
        catch (IOException ex)
        {
            System.out.print(ex);
        }
    }//END main method
    
    }