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

私のプロジェクトの1つで、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 に答える