Java Inventory - 如何使用 FileInputStream 读取文件?

Java Inventory - How to read a file using FileInputStream?

对于本学期我的最后一项作业,我必须创建一个包含 Item 对象数组的库存程序。每个项目都包含一个 ID(在您添加项目时分配并且不能修改)、名称、描述、现有项目数量和单价。

我还需要使用文件 I/O 流来保存和加载文件。我可以很好地保存到文本文件中。但是,我无法开始使用 readFile 方法。我真的很想在不寻求任何帮助的情况下完成这项任务,但我很难过。我如何使用 FileInputStream 读取文本文件?

项目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;
    }

}

库存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();
    }
}

用户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();
    }
}

根据我的讲师的说法,我需要在清单中包含保存和读取文件的方法 class。我需要在我的用户 class 中调用它们。虽然我的项目 ID 变量有 "getter",但不允许我使用 "setter"。

我对 Java 还是很陌生,所以请原谅任何新手错误。再次,非常感谢任何帮助!我查看了我的书并用谷歌搜索了示例,但找不到与我的情况相关的任何内容。

要使用 FileInputStream 读取文件,只需使用:

Scanner input = new Scanner(new FileInputStream("path_to_file"));

使用Scanner的方法读取

while(input.hasNextLine()) { //or hasNextInt() or whatever you need to extract
  input.nextLine() //... read in a line of text from the file
}

如果您希望使用文件 class 方法执行任何文件操作,您也可以使用文件 class

File myTextFile = new File("path_to_file");
Scanner input = new Scanner(new FileInputStream(myTextFile));

你当然需要抓住 FileNotFoundException

否则,它实际上与您为 PrintWriter 所做的一样。 只需将 FileOutputStream 切换为 FileInputStream,将 PrintWriter 切换为 Scanner,但不要忘记在写入或读取文件时先关闭文件:

input.close() // or output.close()