3

Pour l'une de mes dernières affectations de ce semestre, j'ai dû créer un programme d'inventaire qui contenait un tableau d'objets Item. Chaque article contient un ID (qui est attribué lorsque vous ajoutez un article et NE PEUT PAS être modifié), le nom, la description, le nombre d'articles disponibles et le prix unitaire.Java Inventory - Comment lire un fichier avec FileInputStream?

J'ai également besoin de sauvegarder et charger des fichiers en utilisant File I/O Stream. Je suis capable d'enregistrer dans un fichier texte très bien. Cependant, j'ai des problèmes pour démarrer ma méthode readFile. J'essayais vraiment de passer à travers cette mission sans demander d'aide, mais je suis perplexe. Comment est-ce que je lirais dans des fichiers texte en utilisant FileInputStream?

classe article

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

} 

Inventaire classe

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

par mon instructeur, je dois avoir mes enregistrer et lire les méthodes de fichiers dans ma classe d'inventaire. J'ai besoin de les invoquer dans ma classe d'utilisateurs. Alors que j'ai un "getter" pour ma variable Item ID, je ne suis pas autorisé à utiliser un "setter".

Je suis encore relativement nouveau à Java, alors s'il vous plaît excuser des erreurs de débutant. Encore une fois, toute aide est grandement appréciée! J'ai regardé dans mon livre et googlé pour des exemples mais je n'ai pas pu trouver quelque chose de pertinent à ma situation.

+0

je suggère u utiliser un séparateur comme un ',' ou espace pour séparer vos données dans le fichier texte (pour les informations d'un seul utilisateur). Ensuite, en utilisant une nouvelle ligne pour séparer l'entrée de chaque utilisateur. – root

+0

Bien! Je pensais vraiment à faire cela, mais je n'étais pas sûr. –

+0

Ensuite, vous pouvez utiliser la méthode 'useDelimiter()' dans la classe scanner. – root

Répondre

1

Pour lire un fichier en utilisant FileInputStream simplement utiliser:

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

Utiliser des méthodes de scanner pour lire

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

Vous pouvez également utiliser la classe de fichier si vous souhaitez effectuer des manipulations de fichiers en utilisant Fichier méthodes de classe

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

Vous devez bien sûr attraper le FileNotFoundException

Sinon, c'est vraiment la même chose que pour PrintWriter. zappent FileOutputStream pour FileInputStream et PrintWriter pour Scanner, mais ne pas oublier de fermer d'abord le fichier lors du passage de l'écriture ou la lecture du fichier:

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

D'accord, je vois ce que vous faites. Mais comment puis-je les attribuer aux variables appropriées? Par exemple, affecter le numéro d'identification à la variable ID, le nom à la variable name et ainsi de suite? –

+1

Lors de la relecture des données du fichier texte, vous créerez probablement une nouvelle instance de 'Item' transmettant les valeurs que vous avez extraites du fichier texte dans le constructeur ou en utilisant les méthodes setter appropriées. – root

+1

Eh bien, vous pouvez dire nouvel élément (input.nextInt(), input.next(), input.next(), input.nextInt(), entrée.nextDouble()); Mais pour ce faire, vous devez vous assurer que chaque élément du fichier texte se trouve sur une ligne distincte avec chaque élément de données dans le bon ordre de votre constructeur (ou faites à votre constructeur l'ordre correct des données comme dans le fichier texte) – APengue