Dunque, ho provato a risolvere con il seguente codice...(dove P01 è il famoso codice di interruzione)
codice:public class LetturaFile { private BufferedReader reader; private String riga; private String percorsoFile; private ArrayList<String> lettera; private boolean primaLettera =true; public LetturaFile(String percorsoFile) { this.percorsoFile=percorsoFile; this.reader = RecuperoValori.ottieniBufferedReader(percorsoFile); } public String leggi() { try { riga= reader.readLine(); } catch(IOException e) { System.out.println(e.getMessage()); } return riga; } ArrayList<String> ottieniLettera() { if(primaLettera) { riga =leggi(); } while(riga!=null) { if(IsCodiceInterruzione()) { lettera= new ArrayList<String>(); lettera.add(riga); try { riga=reader.readLine(); } catch (IOException e) { System.out.println(e.getMessage()); } aggiungiRighe(); return lettera; } else riga=leggi(); } return null; } ArrayList<String> aggiungiRighe() { while(!riga.substring(0,3).matches("P01")) try { lettera.add(riga); riga= reader.readLine(); if(riga==null) { break; } } catch (IOException e) { System.out.println(e.getMessage()); e.printStackTrace(); } primaLettera=false; return lettera; } boolean IsCodiceInterruzione() { if(riga.length()>2 && riga.substring(0,3).matches("P01")) return true; else return false; } }
che mi da il seguente errore:
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Arrays.java:3209)
at java.lang.String.<init>(String.java:215)
at java.io.BufferedReader.readLine(BufferedReader.jav a:331)
at java.io.BufferedReader.readLine(BufferedReader.jav a:362)
at oggetti.LetturaFile.aggiungiRighe(LetturaFile.java :80)
at oggetti.LetturaFile.ottieniLettera(LetturaFile.jav a:64)
at oggetti.LetturaFile.ottieniRisultatoFiltrato(Lettu raFile.java:114)
(non ho postato il codice di ottieniRisultatoFiltrato perchè sarebbe poco comprensibile...)
La cosa che non riesco a capire è perchè se lo faccio partire senza interfaccia grafica funziona tranquillamente mentre se "monto" la funzione su interfaccia grafica va spedito fino alla lettera numero 6700~ dopodichè inizia a rallentare e dopo un altro centinaio di lettere va in eccezione...
(PS qualsiasi suggerimento per migliorare il codice è sempre ben gradito ...)

Rispondi quotando