Salve a tutti,
sto facendo un programmino per la gestione di un'enoteca. Questo è il testo:

Si supponga che esista il file vini.txt, contenente la situazione iniziale del magazzino strutturata nel modo seguente:
<nome_vino> <annata> <prezzo> <numero_bottiglie>
il numero di righe del file non è noto a priori. Tutti e quattro i campi di una riga sono stringhe di al più 20 caratteri che non contengono spazi.
Dopo aver caricato in memoria il database, il programma deve presentare all’utente un menù (meglio se grafico) con le seguenti opzioni:
1. Tasti <R/r> ricerca per <nome> (restituisce, se presente nel database,
annata, prezzo e numero di bottiglie disponibili).
2. Tasti <V/v> vendita di <n> bottiglie (possibile solo se il prodotto esiste
e se disponibile nella quantità richiesta; ci fossero meno bottiglie di
quelle richieste la transazione deve considerarsi impossibile).
3. Tasti <I/i> inserzione di <n> bottiglie di un vino (se il vino è già
presente nel database, si deve semplicemente incrementare il
contatore delle bottiglie).
4. Tasti <S/s> salvataggio sul file vini.txt del database.
5. Tasti <Q/q> uscita dal programma (senza salvare).

Ho creato tre classi: Enoteca, Menu e Vini.
Ora non sto utilizzando i database e ho scritto questo codice:
codice:
import java.io.*;
public class Menu{
  
  public static void main(String args[]){
    System.out.println("Inserisci il nome del file");
    Enoteca elenco = new Enoteca();
    
    try{
      
      BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
      elenco.loadTesto(input.readLine());
      Vini vino;
      boolean loop = true;
      
      while(loop){
        System.out.println("Inserisci la scelta: ");
        String scelta = " ";
        scelta = input.readLine();
        scelta = scelta.toLowerCase();
        char choice = scelta.charAt(0);
        
        switch(choice){
          case 'r':
            System.out.println("Inserisci il nome del vino: ");
            elenco.ricerca(input.readLine());
          break;
        
          case 'v':
            try{
              System.out.println("Inserisci il nome del vino: ");
              String nome = input.readLine();
              System.out.println("Inserisci l'annata: ");
              String annata = input.readLine();
              System.out.println("Inserisci la quantità desiderata: ");
              int qta = Integer.parseInt(input.readLine());
              elenco.uguale(nome, annata, qta);
            }catch(IOException e) {}
          break;
        
          case 'i':
            System.out.println("Inserisci il nome del vino: ");
            String nome = input.readLine();
            System.out.println("Inserisci l'annata: ");
            String annata = input.readLine();
            System.out.println("Inserisci la quantità: ");
            int qta = Integer.parseInt(input.readLine());
            elenco.inserisci(nome, annata, qta);
          break;
        
          case 's':
            elenco.scriviFile("vini.txt");
            loop = false;
          break;
        
          case 'q':
            loop = false;
            System.exit(0);
          break;
        
          default:
          break;
        }
      } 
    }catch(IOException e) {}
  }
}

classe Enoteca
import java.io.*;
import java.util.*;

public class Enoteca{
  
  LinkedList lista; // = new LinkedList();
  Vini vino;
  
  public Enoteca(){
  	lista = new LinkedList();
  }
  
  public void loadTesto(String file ){
    try {
      String nome;
      String annata;
      String prezzo;
      int num_bott;

       BufferedReader br = new BufferedReader(new FileReader(file));
      String sc = br.readLine(); 
      StringTokenizer st;
      while (sc != null){
        
        st =  new  StringTokenizer(sc);
        
        nome = st.nextToken();
        nome = nome.toLowerCase();
        annata = st.nextToken();
        annata = annata.toLowerCase();
        prezzo = st.nextToken();
        prezzo = prezzo.toLowerCase();
        num_bott = Integer.parseInt(st.nextToken());
        lista.add(new Vini(nome, annata, prezzo, num_bott));
        sc = br.readLine();
      }
      //br.close();
    }
    catch(IOException e) {
      System.out.println("Formato del file di origine errato!\n");
      System.exit(0);
    }
  }
  

  public void ricerca(String nome){
    Iterator i = lista.iterator();
    int count = 0;    
      while(i.hasNext()){
        Vini wine;
        wine = (Vini)i.next();
        if((wine.esisteNom(nome))){
          wine.stampa();
          count++;
        }
      }
      if(count == 0)
        System.out.println("Il vino non è presente nell'elenco");
  }
  
  public void uguale(String nome, String annata, int qta){
    Iterator i = lista.iterator();
    Vini vino;
    int count = 0;
      while(i.hasNext()){
        vino = (Vini)i.next();
        if(vino.esisteNom(nome) && vino.esisteAnn(annata)){
          if(vino.verificaQta(qta)){
            System.out.println("L'operazione è andata a buon fine");
            
          }
          else
            System.out.println("La quantità presente non è sufficiente");
        }count ++;
        
      }
    if (count == 0)
      System.out.println("Il vino non è presente");
  }
  
  public void inserisci(String nome, String annata, int qta){
    Iterator i = lista.iterator();
    Vini vino;
    int count = 0;
      while(i.hasNext()){
        vino = (Vini)i.next();
        if(vino.esisteNom(nome) && vino.esisteAnn(annata)){
          vino.incrementaQta(qta);
          count ++;
        }
      }
      if (count == 0)
        System.out.println("Il vino non è presente");
  }
    
  public void scriviFile(String file){
    Iterator it = lista.iterator();
    try{
      PrintStream out = new PrintStream(new FileOutputStream("risultati.txt"));
      while (it.hasNext()) {
				Vini v = (Vini)it.next();
				out.println(v);
			}
    }
    catch(FileNotFoundException e){
      System.out.println(e);
      System.exit(0);
    }
  }
}

classe Vini

public class Vini{
  private String nome;
  private String annata;
  private String prezzo;
  private int num_bott;
  
  public Vini(String nome, String annata, String prezzo, int num_bott){
    this.nome = nome;
    this.annata = annata;
    this.prezzo = prezzo;
    this.num_bott = num_bott;
  }
  
  public void stampa() {
    System.out.println("annata: "+this.annata+" "+"prezzo: "+this.prezzo+" "+"numero di bottiglie: "+ this.num_bott);
	}
  
  public boolean verificaQta(int qta){
    if((this.num_bott) >= qta){
      this.num_bott -= qta;
      return true;
    }
    return false;
  }
  
  public void incrementaQta(int qta){
    this.num_bott += qta;
  }
  
  public boolean esisteNom(String name){
    if((this.nome).equals(name)){
      return true;
    }else{
    return false;
    }
  }
  
  public boolean esisteAnn(String annata){
    if((this.annata).equals(annata))
      return true;
    return false;
  }
  
  public String toString() {
    String str = new String(this.nome+" "+this.annata+" "+this.prezzo+" "+this.num_bott);
    return(str);
  }
}
ho creato un file "Vini.txt" , ma quando tento di eseguire il programma mi da l'errore "Formato del file di origine errato!".
Sbaglio qualcosa nella lettura del file?
Grazie