Il procedimento che hai seguito non mi sembra logicamente sbagliato, certo se hai file molto lunghi confrontare ogni riga di file1 con tutte quelle di file2 potrebbe essere un po' oneroso ...
Per quanto riguarda il tuo codice alcune cose potrebbero essere migliorate: in primis la gestione dei try catch per leggere i file.
Intanto non serve richiamare il metodo close contemporaneamente sul BufferedReader e sul FileReader, ti basta chiudere il BufferedReader, ma soprattutto la chiusura dovrebbe avvenire in un blocco finally, perché se il tuo programma fallisce con un'eccezione il close () non viene richiamato.
Se vuoi puoi da Java 7 puoi evitare di occuparti della chiusura utilizzando il try-with-resources (fai una piccola ricerca su google ).
Altra cosa che non va è cosa scrivi su file3 : confronti linea1 con linea2, che sono le parti che ti aspetti siano uguali (descrizione?), e poi scrivi due volte linea1 (che se entri nell'if sarà uguale a linea2).
Ma tu in file3 volevi scrivere tutte le informazioni dei due file, ti stai perdendo pezzi...
[quote=Fasyrio]Se utilizzo System.out.println per visualizzare il risultato all'interno della console, ottengo l'output desiderato[/quote]
Quale ouput desiderato ? Nel tuo codice stampi solo i due arraylist, che hanno correttamente all'interno le righe dei file. Hai fatto dei println () anche per controllare che ci siano corrispondenze nelle descrizioni ? Ma anche se ci fossero con quel codice non ottieni l'ouput voluto ...
Per quanto riguarda gli indici delle stringhe, senza avere i file di testo non possiamo sapere se e quando il substring ti lancia una StringIndexOutOfBoundsException (immagino intendessi quello con out of string).
In generale non è una gran bellezza sbattere dentro i valori in substring senza controllare che gli indici esistano prima (controllando laTuaStringa.length () adeguatamente) o senza catturare un'eccezione espressamente.
Lo puoi fare se sei SICURO che il tuo file sia formattato sempre in un certo modo e che quegli indici siano sempre corretti (ma pare non sia questo il caso).
Per aiutarci ad aiutarti, senza postare inutilmente file1 e file2, potresti aggiungere "manualmente" nelle due arraylist rappresentanti le righe del file 2 3 righe per ogni file, così controlliamo se e dove fallisce il confonto. Ad esempio :
ArrayList<String> arr1 = new ArrayList<String>();
arr1.add ("00000 AAAAAAA 1,00");
arr1.add ("00001 BBBBBBBB 2,00");
ArrayList<String> arr2 = new ArrayList<String>();
arr2.add ("A1 AAAAAAA 5");
arr2.add ("B1 BBBBBBBB 6");
Ovviamente metti le righe "vere", visto che utilizzi indici fino a 90 e passa nel tuo codice. Una volta fatto il confronto e capito dove sbagli (ma dovresti avere già un'idea di cosa non vada) puoi ricominciare a leggere da file le tue righe.
PS: utilizza i tag
(aperto e poi chiuso con /) per racchiudere il codice che posti nel forum