Manipulação de arquivo (uso do HashSet, AJUDA)

Ola,
fiz um prgrama com manipulação de arquivo (segue o código).

try {
						
						Scanner pegaNum = new java.util.Scanner(new File(dirGi));
						lArq = "";
						lSeq = "";
						pegaNum.useDelimiter(">");
						while (pegaNum.hasNext()) {
							String linha = pegaNum.next().trim();
							if ((linha.length() > 0)) {
								num = Integer.parseInt(linha.substring(7));
								System.out.println(num);
							    String numS=Integer.toString(num);
								
								
								BufferedReader busca = new BufferedReader(
										new FileReader(new File(dirArq)));
								String stri = "";
								boolean escreve = false;
								
								while ((stri = busca.readLine()) != null) {
									char c = stri.charAt(0);
									
									if (Character.toString(c).equals(">")) {
										
										if (escreve) {
											escArqSplit(lArq, lSeq, num, dirResult);
											escreve = false;
										}
										if (stri.contains(Integer.toString(num))) {
											lArq = stri.toString();
											escreve = true;
										}
									} else {

										if (escreve) {
											lSeq = lSeq + stri;
										}
									}
								}
								if (escreve) {
									escArqSplit(lArq, lSeq, num, dirResult);
									System.out.println("O gi " + lArq + " foi encontrado e escrito no arq.");
									escreve = false;

								}
							}
						}
						
					} catch (IOException e1) {
						e1.printStackTrace();
					}
					LblStatus2.setText("Finalizado");
				}
				

				public void escArqSplit(String arq, String seq, int busca, String pega) {
					BufferedWriter out;
					try {
						out = new BufferedWriter(new FileWriter(new File(pega + "Split -" + busca + ".fsa")));
						out.write(arq + "\r\n" + seq + "\r\n");
						out.newLine();
						lSeq = "";
						System.out.println("O Gi " + num + " foi escrito no arquivo com sucesso");
						out.close();
					} catch (IOException e) {

						e.printStackTrace();
					}

				}
			});
		}

porém o programa demora aproximadamente 40 minutos para ler e gravar separadamente um arquivo de 400Mb.

e uma amiga me falou que usando o HashSet, e armazenando-o em uma lista todas as sequencias seria mais rapido.
gostaria de saber se alguem me ajuda a usa-lo.

obrigado.

Jovem… não sou nenhum expert em manipulação de arquivos em Java, mas já tive a oportunidade de trabalhar com isso algumas vezes. De acordo com minha pouca experiência no assunto, acredito que seu problema é o código. Ele abre e fecha os arquivos várias vezes, para escrever pequenos trechos de texto. Sem contar que há um loop no qual se manipulam vários arquivos ao mesmo tempo.

Talvez seja melhor você dar uma repensada na forma de escrever os dados nos seus arquivos. Acredito que armazenando todos os trechos de Strings para serem gravados todos de uma vez fosse mais eficiente. Não precisaria utilizar um HashSet pra isso, somente concatenando estes trechos e escrevendo todos eles ao mesmo tempo.

Bem… espero ter ajudado. Até.

mas tenho q grava-los separadamente.
cada um deles devem ser gravados em um arquivo diferente.

Sim. Mas a cada chamada de “escArqSplit” você abre o arquivo, grava um pedacinho de texto e fecha o arquivo. No mesmo arquivo várias vezes. Depois você pega outro arquivo e faz a mesma coisa.

Acredito que isso está deixando seu processamento mais lendo. Se ao invés de a cada interação do 2º loop você abrir, gravar e fechar o arquivo, fizesse tudo de uma só vez a cada iteração do 1º loop, melhoraria um pouco a performance.

Mas de qualquer forma, teria que testar. É só uma teoria! =)

Beleza.

vou tentar aqui.