Je veux générer des noms de fichiers d'un masque en Java. p>
quelque chose comme "Data -08-29-xxx.xml" d'un masque comme "données - $ {yy} - $ {mm} - $ {var1} .xml '. Je ne veux pas générer des noms de fichiers aléatoires, mais les noms de fichiers construiraient selon un motif fourni au moment de l'exécution. P>
Je peux imaginer ce que j'ai besoin de créer une belle classe générique qui gérera ceci pour toutes sortes de cas, mais je ne veux pas réinventer la roue, si quelque chose existe là-bas que je peux refuser et peut-être prolonger . p>
Toute suggestion? P>
5 Réponses :
Suggestion d'économie de temps. Merci! Je vais garder quelques plus bonnes idées.
+1 Je ne vois rien ici qui ne peut pas être traité avec un appel simple à String.Format ()
Format f=new SimpleDateFormat("dd-MM-yyyy-HH.mm.ss"); String fileName="Data-"+f.format(new Date() /*or a Date object which you saved previously*/).toString()+".xml"; This will give you something like Data-12-12-2012-14.55.32.xml
Cela ne gère que la mise en forme de la date, pas des variables arbitraires (par exemple var1 code> dans l'exemple de l'OP).
Il est facile d'ajouter tout ce que vous voulez String FileName = "Données -" + F.Format (nouvelle date ()) .tostring () + quelque_var + ". XML"; où certains_var peuvent être int, la chaîne ou quoi que ce soit d'autre peut être concaténé dans une chaîne
MessageFormat messageFormat = new MessageFormat("Data-{0,number,#}-{1}-{2}-{3,number,#}.xml"); Calendar cal = Calendar.getInstance(); int variable = 555; Integer[] args = {cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), variable}; String result = messageFormat.format(args); System.out.println(result); OUTPUT: Data-2012-8-29-555.xml
Le problème avec String.Format () est que vous serez obligé d'utiliser des indices de vos variables dans la chaîne de format et un motif similaire à % 1 $ TY-% 1 $ TM-% 1 $ TD- % 2 $ 03d code> Peut être problématique pour l'utilisateur de traiter:
VelocityContext context = new VelocityContext();
context.put("number", "007");
context.put("year", ...);
Vous pouvez utiliser une petite bibliothèque appelée Alephformater qui vous permet d'avoir des paramètres "nommés" .
Par exemple: p> sortie: p>
Vérifiez la mise en œuvre du log4j. Ils ont déjà résolu le problème d'accepter le modèle de fichier.
@sundar qui n'est pas une solution, je l'utilise réellement
Comment est-ce différent d'exposer certaines données à une chaîne de format ou de modèle et à l'évaluer?
Une solution peut être construite en analysant la chaîne en jetons, en construisant une chaîne de format, puis remplaçant les valeurs de jeton et réassemblant la chaîne. Mais j'imagine que cela a été fait déjà plusieurs fois. J'ai aimé la suggestion de mise en œuvre log4J.