将数据发送到外部文件

时间:2016-03-02 06:35:09

标签: java

首次执行程序时,打开外部文件,从中读取数据并将其放入阵列,然后关闭文件。使用程序提交外部文件。 要首次填充外部文件,请将硬编码到程序中,将数据发送到外部文件。您只需要执行一次 - 就在您为第一个创建外部文件时。 从驱动程序中的菜单中选择“退出”选项时,打开备份外部文件,将阵列保存到文件中,然后关闭文件。
一个警告 - 不要混淆格式化打印数据到屏幕与格式化数组中的数据。使用从外部文件中提取数据时,必须以与从文件中读取数据相同的方式将数据保存到文件中。

***我的数据未保存到文件中。有人能指出我正确的方向请。我需要将数据发送到外部文件以及一些不再发送数据的方法。程序运行但不将数据发送到文件。

import java.io.*;
    import java.util.Scanner;
    public class Driver
    {
       public static void main(String[] args)
       {
           //local constants
       //local variables
       String fileName = "items.txt";
       Scanner scanner = null;
       ItemsList itemsList = new ItemsList(5);
       int i = 0;
       int choice = 0;
       String itemName;
       String name;
       double price = 0;
       int qty;
       String cho = "y";

   Scanner scan = new Scanner(System.in);    

    do
   {
       //Ask the user the following
       System.out.println("Menu");
       System.out.println("1. Add item");
       System.out.println("2. Display items");
       System.out.println("3. Exit");
       System.out.println("Enter your choice");
       choice = scan.nextInt();  

       switch(choice)
       {
           //Add an item to the itemsList
           case 1:
               //Ask user for to enter information
               System.out.println("\tEnter item name : ");
               name=scan.next();

               System.out.println("\tEnter price : ");
               price = scan.nextDouble();

               System.out.println("\tEnter quantity : ");
               qty= scan.nextInt();

               //Add the OneItem to the itemsList
               itemsList.addItem(new OneItem(name, price, qty));
               break;

           case 2:
               //print the list
               //print heading with specific formatter
               System.out.printf("%-10s%-10s%-10s\n\n", "Item","Price","Quantity");
               System.out.println(itemsList.toString());
               break;

           case 3:
               //Terminate the program
               System.out.println("Terminate the program.");   
               break;

           default:
               System.out.println("Incorrect option is selected.");
               break;
        }  
       //Ask user if they would like to continue
       System.out.print("\t\tWould to like to continue <(Y or N)> : ");
       cho = scan.next();
       System.out.println();

    }
   while(cho.equalsIgnoreCase("Y"));


   //open the file and catch the exception if file not found
   try
   {          
      //create an instance of scanner
       scan = new Scanner(new File(fileName));

       //read file items until end of file
       while(scan.hasNext())
       {
           itemName = scan.next();
           price = scan.nextDouble();
           qty=scan.nextInt();

           //Add the OneItem object to the itemList
           itemsList.addItem(new OneItem(itemName, price, qty));
           i++;
       }

       //close the file object
       scan.close();          
   }
   catch (FileNotFoundException e)
   {
       System.out.println(e.getMessage());
   }

   writeToFile(itemsList);
}

  private static void writeToFile(ItemsList itemsList)
   {

   //Create a file name called items.txt
   String filename="items.txt";
   //Create a variable of Class PrintWriter
   PrintWriter filewriter=null;

   try
   {
       //create an instance of PrintWriter
       filewriter=new PrintWriter(new File(filename));

       //close the file writer
       filewriter.close();
   }
   catch (IOException e)
   {
       System.out.println(e.getMessage());
   }
}


}//end Driver class

=========================

public class ItemsList
{
   //declare variables
   private OneItem items[];
   private int size;
   private int count;

   //constructor to set items, size and count to zero
   public ItemsList()
   {
       items = null;
       size = 0;
       count = 0;
   }  
   //Parameter constructor
   public ItemsList(int size)
   {
       items = new OneItem[size];

       for (int i = 0; i < items.length; i++)
       {
           items[i] = new OneItem();
       } 

       this.size = size;
       count = 0;
   }
   //Add OneItem to the itemlist
   public void addItem(OneItem item)
   {
       if(items.length == count)
       {
           resize();
           items[count] = item;
           count++;
       }
       else
       {
           items[count] = item;
           count++;
       }      
   }

   //Resize 
   private void resize()
   {
       int oldsize = size;
       count = oldsize;
       int newsize = 2 * this.size;
       size = newsize;

       OneItem[] tempList = new OneItem[size];

       for (int i = 0; i < oldsize; i++)       
           tempList[i] = items[i];


       items = new OneItem[size];
       items = tempList;      
   }

   //getSize
   public int getSize()
   {
       return count;
   }

   //toString
   public String toString()
   {
        String description = "";
       for (int i = 0; i <count; i++)
       {
           description += items[i].toString();
       }

        return description;
   }
}

====================

public class OneItem
{  
   //declare a variables
   private String name;
   private double price;
   private int quantity; 

   //default constructor
   public OneItem()
   {
       name = "";
       price = 0;
       quantity = 0;
   }  
   //parameter constructor
   public OneItem(String name, double price, int quantity)
   {
       this.name = name;
       this.price = price;
       this.quantity = quantity;
   }

   //toString
   public String toString() 
   {      
       return String.format("%-10s%-10.2f%-10d\n", name,price,quantity);
   }  
}//end of the OneItem class

1 个答案:

答案 0 :(得分:0)

  • writeToFile()没有写任何文件。
  • 它只是创建一个实例并关闭。
  • 你可以迭代itemsList并将每个OneItem打印到文件中,使用println(OneItemObject) - toString()应该注意给出需要写入文件的内容。 (下面几乎是伪代码: - )

     PrintWriter filewriter=null;
    
     try
     {
     // create a new writer
     filewriter  = new PrintWriter(new File(filename));
    
     //Iterate over items and print each item
      for(Item item: itemsList)
      {
       // print object
       filewriter.println(item);
      }
     }
     catch(Exception e)
     {
        e.printStackTrace();
     }
     finally
     {
     // close writer
     if(filewriter!=null) filewriter.close();
     }