For one of my last assignments this semester, I had to create an inventory program that contained an array of Item objects. Each Item contains an ID (that is assigned when you add an item and CANNOT be modified), name, description, number of items on hand, and the unit price.
I also need to save and load files using File I/O Stream. I am able to save to a text file just fine. However, I am having trouble getting started on my readFile method. I was really trying to get through this assignment without asking for any help, but I am stumped. How would I read in text files using FileInputStream?
Item Class
import java.text.NumberFormat;
public class Item
{
private int ID;
private String name;
private String Desc;
private int onHand;
private double unitPrice;
public Item(int pID)
{
ID = pID;
}
public Item(int pID, String pName, String pDesc, int pOnHand, Double pUnitPrice)
{
ID = pID;
name = pName;
Desc = pDesc;
onHand = pOnHand;
unitPrice = pUnitPrice;
}
public void display()
{
NumberFormat dollars = NumberFormat.getCurrencyInstance();
System.out.printf("%-6s%-20s%-24s%-12s%-6s\n", ID, name, Desc, onHand, dollars.format(unitPrice));
}
// GETTERS AND SETTERS
public int getID()
{
return ID;
}
public void setName(String pName)
{
name = pName;
}
public String getName()
{
return name;
}
public void setDesc(String pDesc)
{
Desc = pDesc;
}
public String getDesc()
{
return Desc;
}
public void setOnHand(int pOnHand)
{
onHand = pOnHand;
}
public int getOnHand()
{
return onHand;
}
public void setUnitPrice(double pUnitPrice)
{
unitPrice = pUnitPrice;
}
public double getUnitPrice()
{
return unitPrice;
}
}
Inventory Class
import java.util.Scanner;
import java.io.PrintWriter;
import java.io. FileOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class Inventory
{
int max = 30;
int count = 0;
Item myItem[] = new Item[max];
Scanner scannerObject = new Scanner(System.in);
public void addItem()
{
try{
if (count >= max)
{
System.out.println("\nNo more room!");
}else{
System.out.print("\nPlease enter name of item: ");
String lname = scannerObject.nextLine();
System.out.print("\nPlease enter a brief description of the item: ");
String ldesc = scannerObject.nextLine();
System.out.print("\nPlease enter the amount on hand: ");
int lonHand = scannerObject.nextInt();
System.out.print("\nPlease enter unit price of the item: $");
Double lunitPrice = scannerObject.nextDouble();
myItem[count] = new Item(count + 1, lname, ldesc, lonHand, lunitPrice);
count++;
System.out.println("\nThank you. The ID number for " + lname + " is " + count);
scannerObject.nextLine();
}
}catch(Exception e)
{
System.out.println("\nERROR! Please try again:\n");
scannerObject.nextLine();
}
}
public int findItem()
{
int found = -1;
int inputID =0;
try{
System.out.print("\nGreetings, please enter the ID number for item:\n");
inputID = scannerObject.nextInt();
for(int i = 0; i < count; i++){
if(myItem[i].getID() == inputID){
found = i;
scannerObject.nextLine();
}
}
}catch(Exception e)
{
System.out.println("\nERROR!");
scannerObject.nextLine();
}
return found;
}
public void modify()
{
int lfound = findItem();
if (lfound == -1){
System.out.println("\nInvalid input! Please try again:");
scannerObject.nextLine();
}else{
try{
System.out.print("\nPlease enter name of item: ");
String lname = scannerObject.nextLine();
myItem[lfound].setName(lname);
System.out.print("\nPlease enter a brief description of the item: ");
String ldesc = scannerObject.nextLine();
myItem[lfound].setDesc(ldesc);
System.out.print("\nPlease enter the amount on hand: ");
int lonHand = scannerObject.nextInt();
myItem[lfound].setOnHand(lonHand);
System.out.print("\nPlease enter unit price of the item: $");
double lunitPrice = scannerObject.nextDouble();
myItem[lfound].setUnitPrice(lunitPrice);
scannerObject.nextLine();
}catch (Exception e)
{
System.out.println("\nInvalid command! Please try again: ");
scannerObject.nextLine();
}
}
}
public void displayAll()
{ System.out.println("_______________________________________________________________________________\n");
System.out.println(" Inventory ");
System.out.println("_______________________________________________________________________________\n");
System.out.printf("\n%-6s%-20s%-24s%-12s%-6s\n", "ID:", "Name:", "Description:","On Hand:", "Unit Price:\n"); //Header
System.out.println("_______________________________________________________________________________\n");
for(int i = 0; i < count; i++){
myItem[i].display();
}
}
public void displayOne()
{
int lfound = findItem();
if (lfound == -1){
System.out.println("\nInvalid input! Please try again:");
}else{
System.out.println("_______________________________________________________________________________\n");
System.out.println(" Inventory ");
System.out.println("_______________________________________________________________________________\n");
System.out.printf("\n%-6s%-20s%-24s%-12s%-6s\n", "ID:", "Name:", "Description:","On Hand:", "Unit Price:\n"); //Header
System.out.println("_______________________________________________________________________________\n");
myItem[lfound].display();
}
}
public void saveFile()
{
PrintWriter outputStream = null;
try{
outputStream =
new PrintWriter(new FileOutputStream("H:\\Java\\saveFile.txt"));
}catch (FileNotFoundException e)
{
System.out.println("Error!");
}
if(outputStream != null)
for(int i = 0; i < count; i++){
outputStream.println(myItem[i].getID());
outputStream.println(myItem[i].getOnHand());
outputStream.println(myItem[i].getUnitPrice());
outputStream.println(myItem[i].getName());
outputStream.println(myItem[i].getDesc());
}
outputStream.close();
}
}
User Class
import java.util.Scanner;
public class inventUser
{
public static void main(String[] args)
{
Inventory myInvent = new Inventory();
Scanner scannerObject = new Scanner(System.in);
int Choice = 0;
do{
dispMenu();
Choice = getChoice(scannerObject);
proChoice(Choice, myInvent);
}while (Choice !=0);
}
public static void dispMenu()
{
System.out.println("\n|=============================================|");
System.out.println("| |");
System.out.println("|******************Welcome********************|");
System.out.println("|_____________________________________________|");
System.out.println("| |");
System.out.println("| Press [1] To Add An Item |");
System.out.println("| |");
System.out.println("| Press [2] To Display One Item |");
System.out.println("| |");
System.out.println("| Press [3] To Display All Items |");
System.out.println("| |");
System.out.println("| Press [4] To Modify An Item |");
System.out.println("| |");
System.out.println("| Press [0] To Exit |");
System.out.println("|_____________________________________________|");
System.out.println("|=============================================|");
System.out.println("| Please Make Selection Now... |");
System.out.println("|=============================================|");
System.out.println("|_____________________________________________|\n");
}
public static int getChoice(Scanner scannerObject)
{
boolean x = false;
int pChoice = 0;
do{
try{
pChoice = scannerObject.nextInt();
x = true;
}catch (Exception e){
scannerObject.next();
System.out.println("\nInvalid command! Please try again:\n");
}
}while (x == false);
return pChoice;
}
public static void proChoice(int Choice, Inventory myInvent)
{
switch(Choice){
case 1: myInvent.addItem();
break;
case 2: myInvent.displayOne();
break;
case 3: myInvent.displayAll();
break;
case 4: myInvent.modify();
break;
case 0: System.out.println("\nHave a nice day!");
break;
}myInvent.saveFile();
}
}
Per my instructor, I need to have my save and read file methods in my inventory class. I need to invoke them in my user class. While I have a "getter" for my Item ID variable, I am not allowed to use a "setter".
I am still fairly new to Java, so please excuse any rookie mistakes. Again, any help is greatly appreciated! I looked in my book and Googled for examples but I could not find anything relevant to my situation.
To read a file using FileInputStream simply use:
Scanner input = new Scanner(new FileInputStream("path_to_file"));
Use methods of Scanner to read
while(input.hasNextLine()) { //or hasNextInt() or whatever you need to extract
input.nextLine() //... read in a line of text from the file
}
You can also use the File class if you wish to perform any File manipulations using File class methods
File myTextFile = new File("path_to_file");
Scanner input = new Scanner(new FileInputStream(myTextFile));
You need to of course catch the FileNotFoundException
Otherwise, it's really the same as you've been doing for PrintWriter.
Just switch FileOutputStream
for FileInputStream
, and PrintWriter
for Scanner
, but do not forget to first close the file when switching from writing or reading from the file:
input.close() // or output.close()