我想从Java中的掩码生成文件名。我怎样才能轻松地(在Java中)从掩码字符串生成文件名?
类似于'Data - $ {YY} - $ {MM} - $ {DD} - $ {var1} .xml'之类的掩码中的'Data-12-08-29-xxx.xml'。我不想生成随机文件名,而是根据运行时提供的模式构建文件名。
我可以想象,我需要创建一个很好的泛型类来处理这种情况,但我不想重新发明轮子,如果有什么东西存在,我可以重新使用,也许延伸。
有什么建议吗?
我想从Java中的掩码生成文件名。我怎样才能轻松地(在Java中)从掩码字符串生成文件名?
类似于'Data - $ {YY} - $ {MM} - $ {DD} - $ {var1} .xml'之类的掩码中的'Data-12-08-29-xxx.xml'。我不想生成随机文件名,而是根据运行时提供的模式构建文件名。
我可以想象,我需要创建一个很好的泛型类来处理这种情况,但我不想重新发明轮子,如果有什么东西存在,我可以重新使用,也许延伸。
有什么建议吗?
您可以使用一个小型图书馆称为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
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";
这会给你像数据12-12-2012-14.55.32.xml
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:
数据,2012年8月29日-555.xml
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速度(一个例子这里给出的是: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", ...);
但随后,它会为用户指定格式字符串容易得多..
这将很好地满足要求 - 谢谢! – cmdematos
检查log4j的实现。他们已经解决了接受文件模式的问题。 – sundar
@sundar这不是一个解决方案,我实际上使用它 – CosminO
这与将某些数据暴露给格式或模板字符串并对其进行评估有什么不同? –