gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:00:22 26 4
gpt4 key购买 nike

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

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

元素等级

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

}

库存类

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

用户类

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

根据我的讲师的说法,我需要在库存类中使用保存和读取文件的方法。我需要在我的用户类中调用它们。虽然我的 Item 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
}

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

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()

关于Java Inventory - 如何使用 FileInputStream 读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29664951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com