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);
		
	}