7

我想从 Java 中的掩码生成文件名。

像“Data-${YY}-${MM}-${DD}-${var1}.xml”这样的掩码中的“Data-12-08-29-xxx.xml”。我不想生成随机文件名,而是根据运行时提供的模式构建文件名。

我可以想象我需要什么来创建一个很好的通用类来处理各种情况,但我不想重新发明轮子,如果那里存在我可以重新定位甚至扩展的东西。

有什么建议么?

4

5 回答 5

3

该类Formatter(背后的功能String.format())具有非常强大的格式化语法(比 MessageFormat 强大得多)。它可以处理变量替换以及日期格式。

于 2012-08-29T14:54:36.807 回答
2
 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";

这会给你类似 Data-12-12-2012-14.55.32.xml

于 2012-08-29T14:54:42.407 回答
1
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);

输出:

数据-2012-8-29-555.xml

于 2012-08-29T15:01:40.233 回答
0

String.format() 的问题在于,您将被迫在格式字符串中使用变量的索引,并且类似于以下的模式%1$ty-%1$tm-%1$td-%2$03d可能会给用户带来问题:

Calendar time = Calendar.getInstance();
int number = 7;
String msg = String.format("Data-%1$ty-%1$tm-%1$td-%2$03d.xml", time, number);

在我的一个项目中,我决定使用 Apache Velocity(此处给出了一个示例:http ://www.javaworld.com/javaworld/jw-12-2001/jw-1228-velocity.html )。对于此类任务,它是一个非常强大的工具,但它提供了在您的格式中使用有意义的变量名的可能性Date-${year}-${month}-${day}-${number}.xml。首先,您必须在速度上下文中添加适当的变量:

VelocityContext context = new VelocityContext();
context.put("number", "007");
context.put("year", ...);

但是,用户指定格式字符串会容易得多..

于 2012-08-29T15:27:19.563 回答
0

您可以使用一个名为AlephFormatter的小型库,它允许您拥有“命名”参数。

例如:

String result = template("#{errNo} -> #{c.simpleName} -> #{c.package.name}")
                .arg("errNo", 101)
                .arg("c", String.class)
                .fmt();


System.out.println(result);

输出:

Error number: 101 -> String -> java.lang
于 2017-12-15T16:15:21.587 回答