Website do JFileHelpers - Lib para arquivos texto em Java

37 respostas
F

Finalmente criei vergonha na cara e fiz um site para o projeto JFileHelpers. Para os que não conhecem, esta biblioteca facilita muito o trabalho de arquivo textos em Java. Usando anotações, você pode utilizar um bean existente e mapear suas propriedades para um arquivo delimitado ou de registros de tamanho fixo, por exemplo.

O meu intuito é conseguir colaboradores para o projeto e, como o site tem uma versão em inglês também, ficou mais fácil atingir um público mais amplo. Se você tem algum tempinho e gostaria de ajudar num projeto Java open source, não deixe de visitar o site e entrar em contato.

Seguem os links:

:arrow: Website: http://www.jfilehelpers.com

:arrow: Post no meu blog com o anúncio do site: http://blog.felipecoury.com/jep/2008/06/jfilehelpers-arquivos-texto-se.html

Aguardo seus comentários!

Abraços

37 Respostas

K

Mandou bem! Parabéns!

F

Ah, tenho uma novidade que você vai gostar: implementei a possibilidade de usar anotações em membros privados :slight_smile:

Abraços.

N

Olá, vi o exemplo, o projeto está muito bom! Parabéns.
Eu fiz um que utiliza xml, só que não publiquei.

O link para os fontes está quebrado.

F

Valeu mesmo!

Se quiser contribuir pro projeto me avisa!

Valeu mesmo o toque, está arrumado.

Abraços!

N

Tenho interesse em contribuir com o projeto!

Se quiser, posso te enviar os fontes que eu implementei, mas acho que eles ajudarão pouco; já que é bem parecido com o JFileHelpers (pode importar por tamanho fixo ou delimitador) e ainda não possui a possibilidade de transformar um objeto em texto.

Até

F

Baixa o fonte, dá uma fuçada, vê o que você acha, se tem alguma idéia… Acho que é um começo!

N

Baixa o fonte, dá uma fuçada, vê o que você acha, se tem alguma idéia… Acho que é um começo!
Ok

P

esta bem bacana! parabens!!

D

Pelo que vi, seu projeto seria bastante útil para alguém que precisasse gerar arquivos de remessa bancária (CNAB).

Para quem não conhece, o CNAB é um padrão utilizado pelos bancos para processar informações referentes à duplicatas de seus clientes. Ele define que campos devem ser gravados no arquivo de remessas (que nada mais é que um arquivo texto), com suas posições e tamanhos.

Acho que seria bastante produtivo utilizá-la.

Abraços, e boa sorte com o projeto.

F

Douglas,

Você tem razão. Há uns 10, 12 anos (sem brincadeira) eu trabalhei com geração de CNABs em (acredite!) Clipper. Esta biblioteca é perfeita para este tipo de uso.

Aproveitando, queria agradecer a todos os que estão visitando o site… Tivemos uma multidão de acessos hoje, muito legal. Vamos ver se colhemos frutos no futuro!

Já coloquei no site mais alguns exemplos de uso, como usar registros mestre-detalhe e também o conversor automático de Enums:

http://www.jfilehelpers.com/examples_pt.php

E também criei uma lista de announcements, onde vou divulgar novas funcionalidades…

http://www.jfilehelpers.com/subscribe_pt.php

Vocês acham que criar um fórum de discussões sobre a biblioteca seria uma boa idéia?

Abraços!

D

Eu também já passei por isso, mas acredito que não tenha sido tão traumático como para você… eu fiz isso em Delphi, que acredito eu, deve ser beeeem mais fácil…

Quanto ao fórum, acho a idéia válida…

A

Bem legal a biblioteca cara, ainda com esses pontos extensiveis ficou bem atraente. Já fiz o donwload hehhehee.

Alberto

K

Sugestão:
eu adorei trabalhar com o JFileHelpers, me quebrou um TRONCO em certa ocasião, no entanto, há um pequeno problema: o fato de só ser possível utilizá-lo a partir de anotações. Isto porque é mais uma dependência que eu preciso adicionar aos meus projetos e, consequentemente, parte da reusabilidade das minhas classes anteriormente seria perdida (o ideal seria utilizá-las como elas já estão, sem que eu tenha de alterá-las ou criar algum wrapper para este fim).

Sabe o que seria muito legal? Se fosse possível mapear os atributos dos beans em XML! Assim, eu poderia reaproveitar 100% do código já pronto sem precisar alterá-lo e, de quebra, seria menos uma dependência para o meu código anteriormente criado.

O que me diz?

PS: pessoalmente, tenho muita vontade de dar minha contribuição para este projeto (o meu único problema é o tempo, que, no meu caso, é inexistente). Se bobear, estaria ai minha contribuição para o mesmo.

F

Adorei a sugestão e acho que faz todo sentido do mundo! Você viu o que o usuário nadilsons disse no seu post anterior? Dá uma olhada:

Vou ver com ele se ele não teria interesse em contribuir prá o projeto, justamente nesta área. Mesmo se ele não puder, vou tentar pensar um pouco mais nisso, bolar um formato para o XML e mandar ver.

Ah! O fórum está no ar também: http://forum.jfilehelpers.com . Assim, se quiser mandar esta idéia como feature request lá, ia ser MUITO legal!

Abraços a todos!

A

Dah uma olhada no Smooks (Apache)…

http://milyn.codehaus.org/Smooks

Fcoury,

quais as chances do seu projeto tornar-se um ESB?

E

Parabéns pelo projeto, muito bom! Uma mão na roda!

Não conhecia o Smooks, parece ser interessante também, mas o q q tem ele haver com Apache!?

E

Parabens é assim q o Brasil anda, com força de vontade :smiley:

J

muito bom o projeto, parabéns! te mandei uma mp, quero ajudar no projeto…vlw…

S

Uma pena eu näo poder usar no meu projeto ainda. Estamos com a versão 1.4.

Mas ao invés de incluir no me projeto, eu resolvi fazer o tratamento do arquivo separadamente. O arquivo não é gigante mas é relativamente grande 13.7 MB. Deu OutOfMemory.

<blockquote>Exception in thread “main” java.lang.OutOfMemoryError: Java heap space

at java.lang.reflect.Field.copy(Field.java:127)

at java.lang.reflect.ReflectAccess.copyField(ReflectAccess.java:122)

at sun.reflect.ReflectionFactory.copyField(ReflectionFactory.java:289)

at java.lang.Class.searchFields(Class.java:2602)

at java.lang.Class.getDeclaredField(Class.java:1880)

at org.coury.jfilehelpers.core.RecordInfo$2.run(RecordInfo.java:165)

at java.security.AccessController.doPrivileged(Native Method)

at org.coury.jfilehelpers.core.RecordInfo.setInternalField(RecordInfo.java:160)

at org.coury.jfilehelpers.core.RecordInfo.strToRecord(RecordInfo.java:106)

at org.coury.jfilehelpers.engines.FileHelperEngine.readStream(FileHelperEngine.java:256)

at org.coury.jfilehelpers.engines.FileHelperEngine.readFile(FileHelperEngine.java:169)

at org.coury.jfilehelpers.engines.FileHelperEngine.readFile(FileHelperEngine.java:54)

at MainClass.main(MainClass.java:24)</blockquote>

Eu vi que você tem um limitador de tamanho no método readFile do FileHelperEngine. Minha dúvida é, tem como eu colocar um tamanho máximo e depois continuar de onde parei ?
Outra opção seria ser retornar um iterator e ler o arquivo “em etapas”.

Parabéns pelo projeto.

E

Essa é minha dúvida também… É possível utilizar tipo um “step size” para ler um arquivo grande?

Grato,

Eduardo

R

O JFileHelpers carrega o arquivo inteiro para a memória?
Não tem como fazer um “iterator”?

De qualquer forma, é sempre possível aumentar a memória utilizada pela JVM, utilizando: -Xms??m -Xmx???m

S

Rubem Azenha:
O JFileHelpers carrega o arquivo inteiro para a memória?
Não tem como fazer um “iterator”?

De qualquer forma, é sempre possível aumentar a memória utilizada pela JVM, utilizando: -Xms??m -Xmx???m

Tudo bem, podemos aumentar a memória utilizada, mas até isso tem um limite. No caso do meu teste por exemplo, tinha um arquivo de quase 14 M com uma 250000 linhas. Você transformar tudo em objetos e colocar numa lista não tem memória que agüente.

R

O ideal então seria ter um tipo de iterator.

R

Queria deixar os meus parabéns pela iniciativa! Esse é um projeto que tem utilidade :slight_smile:

E

Só queria saber um projeto que não tem utilidade…?

Todos projetos tem utilidade, pode não ter para ti, mas sempre é útil para alguém! :wink:

F

Atualmente acredito que o tamanho do arquivo é realmente um problema. Será que temos algum candidato a dar uma olhada no código e propor uma solução?

Recebi algumas propostas de ajuda, então se alguém quiser ajudar, começando por este problema, aconselho que entre no fórum:

http://forum.jfilehelpers.com

Para começarmos uma thread sobre o assunto.

Obrigado!

R

Só queria saber um projeto que não tem utilidade…?

Todos projetos tem utilidade, pode não ter para ti, mas sempre é útil para alguém! :wink:

É uma opinião minha: Há pessoas que comecam a desenvolver projetos dé código aberto com intuito de aprender mais, e acho bem bacana. Porém não é muito feliz na escolha do que vai desenvolver. As vezes nem sabe bem o que quer, ou em outros casos, “copia” outro com uma única diferença com intuito de aprender. De qualquer forma merecem palmas pela vontade de aprender.

Bom, todos sabem que existem váarios projetos que são “desenvolvidos” e não sao utilizados nem por seus desenvolvedores.

Mas quero deixar claro que o que disse no post anterior: “Esse é um projeto que tem utilidade” não foi com a intenção de dizer que outros não tem. E sim que esse, de fato, tem destaque. É obvio que todos os projetos tem alguma utilidade, mesmo que seja algo reiventado.

Att,

Renan

E

concerveja :wink:

Mas mesmos estes… já me quebraram um galhão! Encontrar pequenas soluções prontas, mesmo que não use o projeto em si, só de ter uma classe ou um bloco de código que sirva já é excelente! Código aberto nunca é demais! E dar utilidade vai de acordo com a criatividade de cada um…

E

fcoury:
Atualmente acredito que o tamanho do arquivo é realmente um problema. Será que temos algum candidato a dar uma olhada no código e propor uma solução?

Recebi algumas propostas de ajuda, então se alguém quiser ajudar, começando por este problema, aconselho que entre no fórum:

http://forum.jfilehelper.com

Para começarmos uma thread sobre o assunto.

Obrigado!

Eu não tenho muito tempo, mas vou investigar isto e resolver este problema, já que tenho alguma experiência com isto, acho que não vai ser tão complicado assim…

Vou dar uma investigada e fazer umas experiências, depois dou notícias por e-mail.

Há e este link ai para o forum não funfa!

R

Excelente idéia, parabéns pelo projeto.
Eu ja tive muitos problemas para manusear arquivos, e no proximo projeto que eu trabalhar eu com certeza vou implementar as lib do JFileHelpers

R

fcoury:
Atualmente acredito que o tamanho do arquivo é realmente um problema. Será que temos algum candidato a dar uma olhada no código e propor uma solução?

Recebi algumas propostas de ajuda, então se alguém quiser ajudar, começando por este problema, aconselho que entre no fórum:

http://forum.jfilehelper.com

Para começarmos uma thread sobre o assunto.

Obrigado!

Eu dei uma olhada, vi o método que pega a linha e transforma em um objeto. A idéia seria em vez de adicionar numa coleção, criar um esquema que imita uma clousure.

Veja a classe FileHelperEngine, linha 256:

T record = recordInfo.strToRecord(line);

				skip = onAfterReadRecord(currentLine, record);
				if (skip == false && record != null) {
					resArray.add(record);
				}

Poderia em vez de fazer resArray.add, poderia criar uma interface “RecordHandlerLike”, com um método “handleRecordLike”, que recebe, entre outros, o record. Poderia ter uma implementação default que adicionasse o record numa collection, mas se o usuário quisesse ele poderia já trabalhar como cada record em vez de trabalhar com todos depois de todos terem sido carregados.

Talvez manter esse método, refatora-lo, fazer um método que retorna void e recebe o handler como parâmetro… Hum… talvez eu faça um patch disso. O problema é que atualmente os projetos que eu participam não tem nenhuma funcionalidade nova que tenha essa necessidade, então não conseguiria testar numa situação real.

O ideal seria ter clousures, mas quem não tem cão caça com gato…

E

Rubem Azenha:
fcoury:
Atualmente acredito que o tamanho do arquivo é realmente um problema. Será que temos algum candidato a dar uma olhada no código e propor uma solução?

Recebi algumas propostas de ajuda, então se alguém quiser ajudar, começando por este problema, aconselho que entre no fórum:

http://forum.jfilehelper.com

Para começarmos uma thread sobre o assunto.

Obrigado!

Eu dei uma olhada, vi o método que pega a linha e transforma em um objeto. A idéia seria em vez de adicionar numa coleção, criar um esquema que imita uma clousure.

Veja a classe FileHelperEngine, linha 256:

T record = recordInfo.strToRecord(line);

				skip = onAfterReadRecord(currentLine, record);
				if (skip == false && record != null) {
					resArray.add(record);
				}

Poderia em vez de fazer resArray.add, poderia criar uma interface “RecordHandlerLike”, com um método “handleRecordLike”, que recebe, entre outros, o record. Poderia ter uma implementação default que adicionasse o record numa collection, mas se o usuário quisesse ele poderia já trabalhar como cada record em vez de trabalhar com todos depois de todos terem sido carregados.

Talvez manter esse método, refatora-lo, fazer um método que retorna void e recebe o handler como parâmetro… Hum… talvez eu faça um patch disso. O problema é que atualmente os projetos que eu participam não tem nenhuma funcionalidade nova que tenha essa necessidade, então não conseguiria testar numa situação real.

O ideal seria ter clousures, mas quem não tem cão caça com gato…

Eu ja fiz o reader implementando Interator e Interable, e testei com um arquivo de 30 MB sem problemas de memória… só falta implementar o write para poder gerar arquivos grandes também, em vez de receber um Array para isto.

Vou ver se termino isto, e ainda hoje envio o código para o Filipe…

Mas ter um handler para isto também é interessante, bem eu vou te enviar o codigo quando terminar para dares uma olhada e ver como poderia implementar o handler ou se tem ideia melhor.

A

Minha pergunta é:
Dá pra usar com Java 1.4 na boa?

Valeu.

A

Cara…deixa eu aproveitar e perguntar:
Esse jar é o melhor dos mundos…mas ainda não sei se roda em Java 1.4, a outra dúvida é que ainda não entendi como importo o arquivo .txt e converto para uma classe BEAN.
Poderia me esclarecer?

Obrigado.

E

arthurgon:
Minha pergunta é:
Dá pra usar com Java 1.4 na boa?

Valeu.

Não, por que usa Generics, Annotations e Enums que não são suportadas pelo 1.4…

E

arthurgon:
Cara…deixa eu aproveitar e perguntar:
Esse jar é o melhor dos mundos…mas ainda não sei se roda em Java 1.4, a outra dúvida é que ainda não entendi como importo o arquivo .txt e converto para uma classe BEAN.
Poderia me esclarecer?

Obrigado.

Faz o download do .Zip e ve dentro da pasta Samples, lá tem dois exemplos bem simples de entender, foi por ai que eu aprendi a usar.

D

Muito bom, cara!

Bem completo! Parabéns!

Já precisei fazer um framework do mesmo propósito que, aliás, ainda mantenho o projeto ativo!

Abraços!

Criado 7 de junho de 2008
Ultima resposta 19 de jun. de 2008
Respostas 37
Participantes 17