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++;
}
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.");
}
}