ciao a tuti...
ho realizatto un programmino che apre un file di testo, lo splitta riga per riga, cerca in ogni riga se è presente una determinata stringa e se presente la riporta in una textarea...
funziona tutto... il problema si presenta su file di testo di grosse dimensioni.. tipo 50000 righe...
ci mette una vita !!!
avete consigli ???
riporto il codice del metodo che cerca la traccia...
codice:private void cercaTraccia(){ // INIZIALIZZO RISULTATI RICERCA String risultatiRicerca = ""; // SVUOTO LA TEXT AREA jTextArea_RisultatiRicerca.setText(""); // RECUPERO LA TRACCIA String traccia = jTextField_RicercaTraccia.getText(); // LETTURA DEL FILE String fileContent = ""; FileHelper fileHelper = new FileHelper(); try { fileContent = fileHelper.read(jTextField_PathFile.getText()); } catch (IOException e) { e.printStackTrace(); } // PREPARO I PARAMETRI PER LA RICERCA String [] parametriDaCercare; if(jCheckBox_Concatena.isSelected() == false){ parametriDaCercare = new String[1]; parametriDaCercare[0] = traccia; }else{ // SE HO PIù PAROLE DA CERCARE StringTokenizer st1 = new StringTokenizer(traccia, "+"); parametriDaCercare = new String[st1.countTokens()]; int i = 0; while (st1.hasMoreTokens()) { parametriDaCercare[i] = (st1.nextToken().trim()); i++; } } // RICERCA TRACCIA PER OGNI RIGA DEL LOG boolean rigaDaAggiungere = false; StringTokenizer st2 = new StringTokenizer(fileContent,"\n"); String riga = ""; while (st2.hasMoreTokens()) { // RECUPERO LA RIGA DI TESTO DEL LOG riga = st2.nextToken(); // PER OGNI VOCE DELLA TRACCIA for(int index_ricerca = 0;index_ricerca<parametriDaCercare.length;index_ricerca++){ // DICHIARO CHE NON DEVE AGGIUNGERE LA RIGA rigaDaAggiungere = false; // CONTROLLO SE RICERCA NO CASE SENSITIVE if(jCheckBox_CaseSensitive.isSelected() == false){ // CONTROLLO SE TROVA LA TRACCIA NO CASE SENSITIVE if(riga.toUpperCase().indexOf(parametriDaCercare[index_ricerca].toUpperCase()) >= 0){ // SE NON DEVE CERCARE TUTTI I TERMINI AGGIUNGE LA RIGA ED ESCE DAL CICLO if(jCheckBox_CercaTutto.isSelected() == false){ rigaDaAggiungere = true; break; }else{ rigaDaAggiungere = true; } }else{ // SE NON TROVA LA TRACCIA // SE DEVE CERCARE TUTTI I TERMINI NON AGGIUNGE LA RIGA ED ESCE DAL CICLO if(jCheckBox_CercaTutto.isSelected()==true){ rigaDaAggiungere = false; break; } } // FINE CONTROLLO SE TROVA LA TRACCIA NO CASE SENSITIVE }else{ // SE LA RICERCA TRACCIA CASE SENSITIVE // CONTROLLO SE TROVA LA TRACCIA if(riga.indexOf(parametriDaCercare[index_ricerca]) >= 0){ // SE NON DEVE CERCARE TUTTI I TERMINI AGGIUNGE LA RIGA ED ESCE DAL CICLO if(jCheckBox_CercaTutto.isSelected()==false){ rigaDaAggiungere = true; break; }else{ rigaDaAggiungere = true; } }else{ // SE NON TROVA LA TRACCIA // SE DEVE CERCARE TUTTI I TERMINI NON AGGIUNGE LA RIGA ED ESCE DAL CICLO if(jCheckBox_CercaTutto.isSelected()==true){ rigaDaAggiungere = false; break; } } // FINE CONTROLLO SE TROVA LA TRACCIA NO CASE SENSITIVE } // FINE CONTROLLO CASE SENSITIVE } // FINE CICLO PER OGNI VOCE DELLA TRACCIA // CONTROLLO SE LA RIGA è DA AGGIUNGERE O NO if (rigaDaAggiungere==true){ System.out.println(riga); risultatiRicerca = risultatiRicerca + (riga + "\n"); } } // FINE CICLO PER OGNI RIGA jTextArea_RisultatiRicerca.setText(risultatiRicerca); }


Rispondi quotando
