Quantidade de linhas de um arquivo  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Loiane
Moderador
[Avatar]

Membro desde: 29/05/2008 10:18:04
Mensagens: 323
Localização: São Paulo
Offline

Olá,

Existe alguma maneira no Java de saber a quantidade de linhas que um arquivo tem?
E existe alguma forma de ir diretamente para determinada linha?

Tenho um arquivo de 700 mil linhas (em média) e preciso fazer validação na última linha antes de começar a validar as linhas anteriores.
Se fizer isso de forma sequencial fica muito custoso.

Obrigada

Java/Sencha specialist
Blog pt-br (tutoriais e cursos gratuitos): http://www.loiane.com
Autora do Livros Ext JS 4 First Look / Sencha Architect App Development / Mastering ExtJS
Curso ExtJS 4 Gratuito em Português: http://bit.ly/s5S0Oj
Curso Java Básico: http://bit.ly/1dATnvr
[WWW]
quikkoo
JavaEvangelist
[Avatar]

Membro desde: 30/10/2006 21:10:14
Mensagens: 409
Localização: minas
Offline

se vc fala de um arquivo texto crú, o único jeito que eu conheço é percorrer todo o arquivo contando os '\n'

the_book->is_on(the_table);
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17572
Offline

Se o arquivo tiver todas as linhas de um mesmo tamanho (por exemplo, um arquivo CNAB, onde normalmente só a primeira linha tem comprimento diferente das demais), então você consegue ir diretamente para um determinado ponto do arquivo usando RandomAccessFile (não FileReader, que tem de ler o arquivo seqüencialmente).

Se as linhas forem de comprimento diferente, então você teria de ler seqüencialmente mesmo, ou talvez criar um segundo arquivo (diria um "arquivo de índice") indicando onde está o início de cada linha. Esse arquivo obviamente teria de ser criado lendo-se seqüencialmente o arquivo original uma vez, mas depois disso você poderia usá-lo para saber onde ir.

Se o arquivo tem 700.000 linhas mas está em formato XML, o problema é só um "pouquinho" pior. Nesse caso, eu recomendaria o uso de SAX ou STAX (não é aquele salgadinho parecido com o Pringles não :P ).
Em particular acho mais fácil usar STAX que SAX.
[WWW]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17572
Offline

Se o seu problema for "ler a última linha" dá para fazer isso usando uma gambiarra bastante grande. Abra o arquivo com RandomAccessFile e và lendo o arquivo byte por byte, de trás para frente, até encontrar um caracter "\n" (o byte 0x10). Isso quer dizer que você achou a última linha. (Pode ser que você já o encontre logo de cara, porque a última linha foi terminada com "\n". Se for esse o caso, então ache o segundo "\n". Quando você achar o segundo "\n", você terá lido apenas e tão somente a última linha. É meio nojento mas deve funcionar.
Não esqueça de ir acumulando os bytes que você leu, é claro.

This message was edited 1 time. Last update was at 29/05/2008 10:38:46

[WWW]
Loiane
Moderador
[Avatar]

Membro desde: 29/05/2008 10:18:04
Mensagens: 323
Localização: São Paulo
Offline

Vou pesquisar sobre essa classe.

Obrigada pela ajuda!


Java/Sencha specialist
Blog pt-br (tutoriais e cursos gratuitos): http://www.loiane.com
Autora do Livros Ext JS 4 First Look / Sencha Architect App Development / Mastering ExtJS
Curso ExtJS 4 Gratuito em Português: http://bit.ly/s5S0Oj
Curso Java Básico: http://bit.ly/1dATnvr
[WWW]
gmmascarin
JavaChild
[Avatar]

Membro desde: 03/02/2011 22:32:39
Mensagens: 135
Localização: Araraquara/SP
Offline

Loiane

Sei que esse tópico é antigo, mas vou responder essa dúvida para aqueles que tiverem o mesmo problema futuramente e passarem por aqui.



[]s

System Analyst
Oracle Certified Professional - Java SE 6 Programmer
Oracle Certified Professional - Java EE 5 Web Component Developer
Oracle Certified Expert, Java Platform, Enterprise Edition 6 Enterprise JavaBeans Developer (EM BREVE)
vhboechat
What is classpath?
[Avatar]

Membro desde: 29/03/2010 15:35:12
Mensagens: 5
Offline

gmmascarin,

se te serve de consolo.


Obrigado por responder o post da Loiane, mesmo sendo antigo me ajudou!! rs


"O tempo é o único capital de quem só possui a fortuna de sua inteligência. "

vhboecaht@gmail.com
[MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team