Est-il un moyen intelligent d'écrire une longueur fixe de fichier plat?
Est-il un cadre/bibliothèque à l'aide de l'écriture de longueur fixe à plat des fichiers en java?
Je veux écrire une collection de fèves/entités dans un fichier plat sans se soucier avec les conversions, rembourrage, d'alignement, de mastics, de l'etcs
Par exemple, j'aimerais analyser un bean comme:
public class Entity{
String name = "name"; //length = 10; align left; fill with spaces
Integer id = 123; //length = 5; align left; fill with spaces
Integer serial = 321 //length = 5; align to right; fill with '0'
Date register = new Date();//length = 8; convert to yyyyMMdd
}
... dans ...
name 123 0032120110505
mikhas 5000 0122120110504
superuser 1 0000120101231
...
Que voulez-vous faire exactement? Maintenant, il sonne comme Java intégré dans les fonctions devrait être suffisant pour vos besoins.
Je veux écrire une collection de fèves/entités dans un fichier plat sans se soucier avec les conversions, rembourrage, d'alignement, de mastics, de l'etcs
Ce que vous cherchez n'est pas un cadre/bibliothèque pour écrire un fichier plat. Vous êtes à la recherche d'un cadre/bibliothèque de convertir les haricots/entités dans un format plat que vous pouvez écrire dans un fichier.
Par ailleurs, pourquoi a-t-elle à être un fichier plat, contrairement à XML, JSON, YAML, Java-Sérialisation, et.c.?
Il doit être un fichier texte. C'est une interface avec un système d'héritage.
Je veux écrire une collection de fèves/entités dans un fichier plat sans se soucier avec les conversions, rembourrage, d'alignement, de mastics, de l'etcs
Ce que vous cherchez n'est pas un cadre/bibliothèque pour écrire un fichier plat. Vous êtes à la recherche d'un cadre/bibliothèque de convertir les haricots/entités dans un format plat que vous pouvez écrire dans un fichier.
Par ailleurs, pourquoi a-t-elle à être un fichier plat, contrairement à XML, JSON, YAML, Java-Sérialisation, et.c.?
Il doit être un fichier texte. C'est une interface avec un système d'héritage.
OriginalL'auteur Mikhas | 2011-05-04
Vous devez vous connecter pour publier un commentaire.
Si vous êtes toujours à la recherche d'un cadre, découvrez BeanIO à http://www.beanio.org
La dernière version de BeanIO en 2013, Est ce que quelqu'un à le maintenir?
OriginalL'auteur Kevin
Vous n'êtes pas susceptible de rencontrer un cadre qui peut faire face à un "Héritage" du système de format. Dans la plupart des cas, les systèmes existants ne pas utiliser des formats standards, mais les cadres de l'attendre d'eux. En tant que responsable des anciens systèmes COBOL et Java/Groovy convertir, je rencontre ce problème fréquemment. "L'inquiéter avec les conversions, rembourrage, d'alignement, de mastics, de l'etcs" c'est principalement ce que vous faites lorsque vous traitez avec un système d'héritage. Bien sûr, vous pouvez encapsuler des de il loin dans la pratique des aides. Mais plus probablement, vous aurez besoin d'obtenir de véritables familier avec java.util.Module de formatage.
Par exemple, vous pouvez utiliser le pattern Décorateur pour créer des décorateurs pour faire la conversion. Ci-dessous, c'est un peu groovy (facilement convertibles en Java):
C'est réalisable si vous n'avez pas trop de ces et les objets ne sont pas trop complexes. Mais assez rapidement la chaîne de format devient intolérable. Ensuite, vous pouvez décorateurs pour la Date, comme:
de sorte que vous pouvez formater avec %s:
Mais pour un nombre important de propriétés du bean, la chaîne est encore trop brut, si vous voulez quelque chose qui comprend les colonnes et les longueurs qui ressemble à la COBOL spec-vous ont été remis, de sorte que vous allez écrire quelque chose comme ceci:
Après que vous avez écrit assez setField() des méthodes pour gérer vous système d'héritage, vous aurez à examiner brièvement les publier sur GitHub comme un "cadre" de sorte que la prochaine pauvres sap n'ont pas à nouveau. Mais alors, vous verrez tout le ridicule des moyens que vous avez vu COBOL magasin une "date" (MMJJAA, AAMMJJ, YYDDD, AAAAJJJ) et numériques (décimal implicite, explicite virgule, signe de fuite de se séparer ou de signer en tant que leader flottant de caractères). Ensuite, vous vous rendrez compte pourquoi personne n'a produit d'un bon cadre de cette et parfois post bits de votre code de production en SORTE qu'un exemple... 😉
OriginalL'auteur Dave Smith
univocité-analyseurs va un long chemin pour soutenir délicat à largeur fixe formats, y compris les lignes avec différents domaines, les rembourrages, etc.
Découvrez cet exemple pour écrire imaginaire client & les comptes de détails. Il utilise une anticipation de la valeur pour identifier le format à utiliser lors de l'écriture d'une ligne:
La sortie sera:
C'est juste un exemple grossier. Il existe de nombreuses autres les options disponibles, y compris le soutien pour annoté java beans, que vous pouvez trouver ici.
Divulgation: je suis l'auteur de cette bibliothèque, il est open-source et libre (Licence Apache 2.0)
OriginalL'auteur Jeronimo Backes
Spring Batch a un
FlatFileItemWriter
, mais cela ne vous aidera pas, sauf si vous utilisez l'ensemble de Spring Batch API.Mais en dehors de cela, je dirais que vous avez juste besoin d'une bibliothèque qui rend l'écriture de fichiers facile (sauf si vous voulez écrire la totalité de l'IO code vous-même).
Deux qui me viennent à l'esprit sont:
Goyave
Commons /IO
OriginalL'auteur Sean Patrick Floyd
La bibliothèque Fixedformat4j est une très soigné outil pour faire exactement cela: http://fixedformat4j.ancientprogramming.com/
OriginalL'auteur jeyben
Ne connais pas de cadre de travail, mais vous pouvez simplement utiliser RandomAccessFile. Vous pouvez positionner le pointeur de fichier de n'importe où dans le fichier pour faire de votre lit et écrit.
OriginalL'auteur camickr
Je viens de trouver une belle bibliothèque que j'utilise:
http://sourceforge.net/apps/trac/ffpojo/wiki
Très simple à configurer avec XML ou les annotations!
OriginalL'auteur Mikhas
Un moyen simple d'écrire des haricots ou des entités dans un fichier plat, est d'utiliser ObjectOutputStream.
Vous pouvez écrire à une longueur fixe de fichier plat avec
Vous avez besoin pour être plus précis sur ce que vous voulez faire avec le fichier. 😉
La solution au-dessus de résoudre le problème, il peut écrire n'importe quel objet dans un fichier au format binaire. Si vous voulez format texte, il suffit de faire une base64 conversion ou quelque chose comme ça. Pour la taille fixe, il suffit de fournir plus que nécessaire, et vous êtes très bien.
Pourquoi voudriez-vous avoir une longueur fixe de fichier pour chaque champ. Vous pouvez obtenir un exemple de ce dont vous parlez, par exemple, un objet que vous voulez écrire et ce que vous attendez.
J'ai mis à jour la question avec plus de détails
OriginalL'auteur Peter Lawrey
Essayer FFPOJO API car il a tout ce dont vous avez besoin pour créer un fichier plat avec des longueurs fixes et aussi il vous permet de convertir un fichier à un objet et vice-versa.
Se la de ma mise à jour.
Merci pour modifier..
OriginalL'auteur jatinder pandey