2012-08-29 14 views
7

我想从Java中的掩码生成文件名。我怎样才能轻松地(在Java中)从掩码字符串生成文件名?

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

我可以想象,我需要创建一个很好的泛型类来处理这种情况,但我不想重新发明轮子,如果有什么东西存在,我可以重新使用,也许延伸。

有什么建议吗?

+1

检查log4j的实现。他们已经解决了接受文件模式的问题。 – sundar

+0

@sundar这不是一个解决方案,我实际上使用它 – CosminO

+0

这与将某些数据暴露给格式或模板字符串并对其进行评估有什么不同? –

回答

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 
3

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

+0

节省时间的建议。谢谢!我会支持一些更好的想法。 – cmdematos

+0

+1我在这里没有看到任何不能通过简单的字符串调用来处理的东西。格式() – Alex

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"; 

这会给你像数据12-12-2012-14.55.32.xml

+0

只能处理日期格式,而不是任意变量(例如OP的示例中的'var1')。 – jtahlborn

+0

很容易添加任何你想要的String fileName =“Data - ”+ f.format(new Date()).toString()+ SOME_VAR +“。xml”;其中SOME_VAR可以是int,字符串或其他任何可以连接在字符串 – CosminO

+1

当然,但这不是一个通用的格式化语法。 – jtahlborn

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); 

OUTPUT:

数据,2012年8月29日-555.xml

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速度(一个例子这里给出的是: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", ...); 

但随后,它会为用户指定格式字符串容易得多..

+0

这将很好地满足要求 - 谢谢! – cmdematos

相关问题