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.
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.
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.
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:
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…
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.
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!
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.
[quote]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)[/quote]
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”.