2012-08-29 22 views
7

मैं जावा में मास्क से फ़ाइल नाम जेनरेट करना चाहता हूं।मैं आसानी से (जावा में) मास्क स्ट्रिंग से फ़ाइल नाम कैसे उत्पन्न कर सकता हूं?

'डेटा - $ {YY} - $ {MM} - $ {DD} - $ {var1} .xml' जैसे मास्क से 'डेटा -12-08-29-xxx.xml' जैसा कुछ। मैं यादृच्छिक फ़ाइल नाम उत्पन्न नहीं करना चाहता, इसके बजाए फ़ाइल नाम रनटाइम पर दिए गए पैटर्न के अनुसार बनाए जाएंगे।

मैं कल्पना कर सकता हूं कि मुझे एक अच्छी, जेनेरिक कक्षा बनाने की ज़रूरत है जो इसे सभी तरह के मामलों के लिए संभाल लेगा, लेकिन मैं पहिया को फिर से शुरू नहीं करना चाहता, अगर वहां कुछ मौजूद है तो मैं फिर से उद्देश्य कर सकता हूं और शायद विस्तार।

कोई सुझाव?

+1

जांच log4j कार्यान्वयन। उन्होंने फ़ाइल पैटर्न को स्वीकार करने की समस्या को हल कर लिया है। – sundar

+0

@ सुंडर जो समाधान नहीं है, मैं वास्तव में इसका उपयोग कर रहा हूं – 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() के पीछे की कार्यक्षमता) में एक बहुत ही शक्तिशाली स्वरूपण वाक्यविन्यास है (संदेशफॉर्मैट से कहीं अधिक शक्तिशाली)। यह परिवर्तनीय प्रतिस्थापन के साथ ही तिथि स्वरूपण संभाल सकता है।

+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

जो केवल दिनांक स्वरूपण को संभालता है, मनमानी चर नहीं (उदा। ओपी के उदाहरण में 'var1')। – jtahlborn

+0

जो भी आप चाहते हैं उसे जोड़ना आसान है स्ट्रिंग फ़ाइल नाम = "डेटा -" + f.format (नई तिथि()) .toString() + SOME_VAR + "। Xml"; जहां SOME_VAR स्ट्रिंग – CosminO

+1

में int, स्ट्रिंग या जो कुछ भी समेकित किया जा सकता है, लेकिन यह सामान्य प्रारूपण वाक्यविन्यास नहीं है। – 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); 

उत्पादन:

डाटा-2012/08/29 -555.xml

0

स्ट्रिंग.फॉर्मैट() के साथ समस्या यह है कि आपको उपयोग करने के लिए मजबूर किया जाएगा

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

अपनी परियोजनाओं में से एक में मैं अपाचे वेग उपयोग करने का फैसला (एक उदाहरण यहाँ दिया जाता है:: उपयोगकर्ता के लिए से निपटने के लिए प्रारूप स्ट्रिंग और एक पैटर्न %1$ty-%1$tm-%1$td-%2$03d के समान में अपने चर के सूचकांक समस्याग्रस्त किया जा सकता है 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

संबंधित मुद्दे

 संबंधित मुद्दे