2012-05-06 24 views
7

का उपयोग कर जावा में फ़ाइल में फ़ाइल प्रकार को जोड़ना मैं JFileChooser का उपयोग करके एक छवि को सहेजने की कोशिश कर रहा हूं। मैं केवल उपयोगकर्ता को jpg के रूप में छवि को सहेजने में सक्षम होना चाहता हूं। हालांकि अगर वे टाइप नहीं करते हैं .jpg इसे एक छवि के रूप में सहेजा नहीं जाएगा। क्या फ़ाइल के अंत में किसी भी तरह ".jpg" संलग्न करना संभव है?JFileChooser

File file = chooser.getSelectedFile() + ".jpg"; 

काम नहीं करता क्योंकि मैं एक फ़ाइल में एक स्ट्रिंग जोड़ रहा हूं।

उत्तर

9

File को String पर कनवर्ट क्यों न करें और जब आप पूरा कर लें तो नया File बनाएं?

File f = chooser.getSelectedFile(); 
String filePath = f.getAbsolutePath(); 
if(!filePath.endsWith(".jpg")) { 
    f = new File(filePath + ".jpg"); 
} 

याद रखें, आप अगर यह पहले से ही वहाँ है .jpg जोड़ने की जरूरत नहीं है।

+0

यह उत्तर यह करेगा। हालांकि एक unneeded स्ट्रिंगबिल्डर निर्माण से बचने के लिए filePath.concat ("। Jpg") करें। – Justin

+0

@ जस्टिन एक नया 'स्ट्रिंगबिल्डर' बनाने का ओवरहेड नगण्य होना चाहिए क्योंकि वह केवल एक बार कार्रवाई कर रहा है। – Jeffrey

+0

धन्यवाद जेफरी :) दुख की बात है कि मैं अभी तक वोट नहीं दे सकता। क्या आपको पता है क्यों \t \t \t \t \t प्रारूप नाम यहां आवश्यक है: ImageIO.write (image, "jpg", file); ऐसा कोई फर्क नहीं पड़ता है? यदि आपके पास फ़ाइल पर प्रारूप होना है तो वैसे भी? – Kingteeb

1

सबसे अच्छा तरीका स्वीकार्य प्रविष्टि की जांच करना होगा। यदि कोई नहीं मिला है तो इसके ऊपर लिखने के बजाय फ़ाइल बहिष्कार को प्रतिस्थापित करें।

File f = chooser.getSelectedFile().getAbsolutePath(); 
String path = f.getAbsolutePath(); 
if (!path.matches(".*\\.(jpg|jpeg)")) { 
    // If the extension isn't there. We need to replace it 
    path = path.substring(0, path.lastIndexOf(".") + 1).concat("jpg"); 
    f = new File(path); 
} 
+1

एक 'if' के साथ सभी एक्सटेंशन को कवर करने का एक अच्छा समाधान है, लेकिन इसे केस असंवेदनशील बनाने के लिए '(? I)' जोड़ने की आवश्यकता है (जेपीजी और साथ ही जेपीजी पकड़ें):' if (! Path.matches ("(?। i) * \\ (jpg |। jpeg) "))'।उस मामले के लिए भी खाते की आवश्यकता है जहां चयनित (या टाइप किए गए) फ़ाइल नाम में कोई एक्सटेंशन नहीं है, जहां 'path.lastIndexOf ("। ") 'रिटर्न -1 (उदाहरण के लिए इनपुट' test' के साथ, कोड इसे बदल देगा 'test.jpg' के बजाय 'jpg''। – chr

+0

एक और चीज से सहमत है जो आप कर सकते हैं यदि आप गति चाहते हैं तो सभी को एक साथ छोड़ दें। – Justin

+0

कोड डिस्क को पढ़ने या लिखने वाला है, रेगेक्स की तुलना में पीला होगा मैं आपको सभी संभावित एक्सटेंशन को पकड़ने के लिए रेगेक्स का उपयोग करने के तरीके को पसंद करता हूं। – chr

4

यह काम करता है अगर आप दो चरणों में कार्य करें: चयनित फ़ाइल एक्सटेंशन जोड़ना है, तो विस्तार इसके परिशिष्ट साथ File वस्तु बनाने के।

String withExtension = chooser.getSelectedFile().getAbsolutePath() + ".jpg"; 
File file = new File(withExtension) 

अपने प्रश्न में निहित है, लेकिन सिर्फ सभी आधार कवर करने: यदि विस्तार पहले से ही वहाँ पहली बार नहीं है की जांच की जरूरत है, जैसे:

String withExtension = chooser.getSelectedFile().getAbsolutePath(); 
if(!withExtension.toLowerCase().endsWith(".jpg")) 
    withExtension += ".jpg"; 

[आप ".jpeg जोड़ सकते हैं "ऊपर if पर - यह जेपीईजी फाइलों के लिए एक वैध विस्तार है]

नीचे दिया गया कोड काम कर सकता है या नहीं भी। File में toString() है जो इसे संकलित करने की अनुमति देगा, लेकिन मैं उपर्युक्त विधि का उपयोग करना चाहूंगा, जहां मैं सही पथ नाम को नियंत्रित कर सकता हूं। toString()File ऑब्जेक्ट के लिए प्रलेखन मेरे लिए बिल्कुल स्पष्ट नहीं है कि यह वास्तव में क्या लौटाता है। इस तरह के मामलों में, मैं एक ऐसा फ़ंक्शन कॉल करना पसंद करता हूं जिसे मैं जानता हूं कि मुझे निश्चित रूप से क्या चाहिए।

File file = new File(chooser.getSelectedFile() + ".jpg"); 

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

  • कोई संबंधित समस्या नहीं^_^