7
votes

Comment puis-je facilement générer des noms de fichiers d'une chaîne de masque?

Je veux générer des noms de fichiers d'un masque en Java.

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.

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 .

Toute suggestion?


4 commentaires

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.


5 Réponses :



2
votes
 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

2 commentaires

Cela ne gère que la mise en forme de la date, pas des variables arbitraires (par exemple var1 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



1
votes
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

0 commentaires

0
votes

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", ...);


0 commentaires

0
votes

Vous pouvez utiliser une petite bibliothèque appelée Alephformater qui vous permet d'avoir des paramètres "nommés" .

Par exemple: xxx

sortie: xxx


0 commentaires