For com muitas repetições

2 respostas
brunobuild

Estou criando arquivos de texo mas esse arquivo pode ter somente 1000 linhas cada um, mas a quantidade de linhas varia de acordo com a consulta no banco normalmente ele traz por volta de 15 mil linhas mas quando eu estou gerando ele está se perdendo e gerando somente 4 arquivos onde era para ele gerar 15 arquivos contendo mil linhas cada.
Mas se eu faço esse procedimento debugando ele gera todos os arquivos normalmente.
O que eu preciso fazer?

ELE EXECUTA O FOR COM APROXIMADAMENTE 15 MIL REPETIÇÕES

if (list.size() > 0)
			{
				linhas = Converter.toint(Setup.getContextInstance().getString("sistema_exportador_linha"));
				
				next = linhas;
				writer = new BufferedWriter(new FileWriter(this.getExportFile(), true));
				
				for (int i = 1; i < list.size(); i++)
				{
					if (i > next)
					{
						next += linhas;
						writer.flush();
						writer.close();
						
						writer = new BufferedWriter(new FileWriter(this.getExportFile()));
					}
													
					writer.write(list.get(i).getDoc_ref_no());
					writer.newLine();
				}
				
				writer.flush();
				writer.close();									
			}

2 Respostas

O

Sua lógica só tem dois erros pequenos: for (int i = 0; i < list.size(); i++) e if (i >= next), mas isso não é razão pra gerar apenas 4 arquivos. Aliás, não sei o que acontece dentro do this.getExportFile(), mas se for sempre o mesmo arquivo ou String, era pra estar gerando apenas 1 e não 4 arquivos, e este 1 só teria as últimas 1000 linhas.
Acredito que o erro esteja aí.
Vou dar outra opção de lógica:

Iterator<SeuBean> iter = list.iterator(); while (iter.hasNext()) { writer = new BufferedWriter(new FileWriter(this.getExportFile())); for (int i = 0; i < linhas; i++) { writer.write(iter.next().getDoc_ref_no()); writer.newLine(); } writer.flush(); writer.close(); }Lebrando que provalvemente o problema deve estar em this.getExportFile().

brunobuild

ozix,

Ficou muito loko essa lógica ai cara vlw, só que continuo com o problema, eu consigo resolver fazendo isso aqui.
Não sei pq acontece acho que ele está criando outro arquivo antes de fechar o outro, não sei pq isso acontece

while (iterator.hasNext())
			{
				Thread.sleep(1);
				writer = new BufferedWriter(new FileWriter(this.getExportFile()));

				for (int i = 0; i < linhas; i++)
				{
					writer.write(iterator.next().getDoc_ref_no());
					writer.newLine();
				}
				
				writer.flush();
				writer.close();
			}
Criado 21 de agosto de 2008
Ultima resposta 22 de ago. de 2008
Respostas 2
Participantes 2