Quote Originariamente inviata da LeleFT Visualizza il messaggio
Così com'è strutturato non va bene e ci sono diversi errori:

1) Cerchi di eliminare 2 volte il file "inFile".
2) Non effettui il flush delle scritture, con il rischio di perdere eventuali dati ancora bufferizzati e non scritti
3) L'intera gestione delle eccezioni e, di conseguenza, dei try/catch non va affatto bene.
4) In caso di eccezione non stampi lo stackTrace, ma uccidi sia l'eccezione che l'intero processo... per l'intero processo è una tua scelta, per l'eccezione consiglierei di stampare lo stackTrace, altrimenti non saprai mai per quale ragione reale il processo è morto.


Ho cercato di dare una raddrizzata al tuo codice (non mi sono preoccupato di controllare la correttezza di letture/scritture e altri eventuali calcoli). Prova a vedere come va:

codice:
    public void addPrenotazione(ArrayList<Posto> a) {

        // Dichiariamo e inizializziamo gli oggetti File
        File inFile = new File("file1.txt");
        File out = new File("file1_agg.txt");

        // Dichiariamo (e inizializziamo a null) gli stream
        Scanner scan = null;
        PrintStream scrivi = null;
        try {
            scan = new Scanner(inFile);

            //APRO FILE DI OUTPUT
            scrivi = new PrintStream(out);

            int h = 0;
            while (scan.hasNext()) {
                //riempio l'arraylist con i dati del file
                linee.add(new Posto(scan.next().charAt(0), scan.nextInt(), scan.nextInt()));
                System.out.println(linee.get(h).fila + " " + linee.get(h).posto + " " + linee.get(h).flagDis);
                h++;
            }
            scan.close();

            int i = 0, j = 0;
            while (i < a.size()) {
                if (a.get(i).fila == linee.get(j).fila && a.get(i).posto == linee.get(j).posto) {
                    linee.get(j).flagDis += 1;
                    i++;
                    j++;
                } else {
                    j++;
                }
            }

            for (int k = 0; k < linee.size(); k++) {
                scrivi.println(linee.get(k).fila + " " + linee.get(k).posto + " " + linee.get(k).flagDis);
            }

            // Se vuoi evitare di perdere la roba bufferizzata e non scritta, forza un flush!
            scrivi.flush();

         } catch (Exception e) {

            // Mai ammazzare le eccezioni!
            e.printStackTrace();
            System.exit( 1 );   // Boh... vedi tu

         } finally {

            // La chiusura degli stream va fatta nel finally!
            if (scan != null) {
               try { scan.close(); } catch (Exception e) { }
            }
            if (scrivi != null) {
               try { scrivi.close(); } catch (Exception e) { }
            }

         }

         // Ora i file sono disponibili e possiamo lavorarci su
         if (!inFile.delete()) {
             System.out.print("File Non Eliminato");
         }

         boolean Rinomina = out.renameTo(inFile);
         if (!Rinomina) {
             System.out.println("File o directory non rinominati. PRENOTAZIONE NON COMPLETATA.");
         }
    }
ho risolto ordinando il codice grazie a te e a tutti