首次执行程序时,打开外部文件,从中读取数据并将其放入阵列,然后关闭文件。使用程序提交外部文件。
要首次填充外部文件,请将硬编码到程序中,将数据发送到外部文件。您只需要执行一次 - 就在您为第一个创建外部文件时。
从驱动程序中的菜单中选择“退出”选项时,打开备份外部文件,将阵列保存到文件中,然后关闭文件。
一个警告 - 不要混淆格式化打印数据到屏幕与格式化数组中的数据。使用从外部文件中提取数据时,必须以与从文件中读取数据相同的方式将数据保存到文件中。
***我的数据未保存到文件中。有人能指出我正确的方向请。我需要将数据发送到外部文件以及一些不再发送数据的方法。程序运行但不将数据发送到文件。
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
答案 0 :(得分:0)
你可以迭代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();
}