2012-08-31 20 views
6

मैं फ़ाइल को ज़िप और अनजिप करने के लिए प्रोग्राम को कार्यान्वित करने की कोशिश कर रहा हूं। सभी मैं करना चाहता हूँ fileName.zip के रूप में है और यह परिवर्तन fileName.fileExtension के लिए फिर से अनज़िप करने पर एक फ़ाइल (fileName.fileExtension) नाम के साथ ज़िप करने है। क्या कोई मुझे ऐसा करने का तरीका बता सकता है?रनटाइम पर फ़ाइल एक्सटेंशन को कैसे बदलें

File file = new File("fileName.zip"); // handler to your ZIP file 
File file2 = new File("fileName.fileExtension"); // destination dir of your file 
boolean success = file.renameTo(file2); 
if (success) { 
    // File has been renamed 
} 
+0

कब के लिए अपाचे एपीआई जाँच के साथ भी काम करता है, http://commons.apache.org/io/api-1.4/org/apache/commons/ io/FilenameUtils.html) –

+0

मैं [File.renameTo] पढ़ने के साथ शुरू करूंगा (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#renameTo (java.io फ़ाइल)) – MadProgrammer

+0

@ नंदकुमार: धन्यवाद मुझे लगता है कि यह मेरे लिए कुछ उपयोगी होगा। लेकिन समस्या यह प्रतीत होती है कि मैं फ़ाइल को किसी भी समय बाद में अनजिप कर सकता हूं (किसी अन्य सत्र में हो सकता है)। मैं अपने पिछले एक्सटेंशन को कैसे संरक्षित करूं? – rahul0789

उत्तर

4

साथ प्रयास करें।

public static void modify(File file) 
    { 
     int index = file.getName().indexOf("."); 
     //print filename 
     //System.out.println(file.getName().substring(0, index)); 
     //print extension 
     //System.out.println(file.getName().substring(index)); 
     String ext = file.getName().substring(index); 
     //use file.renameTo() to rename the file 
     file.renameTo(new File("Newname"+ext)); 
    } 

संपादित: जॉन की विधि फ़ाइल (विस्तार रखने) नाम बदलता है। विस्तार को बदलने के लिए कार्य करें:

public static File changeExtension(File f, String newExtension) { 
    int i = f.getName().lastIndexOf('.'); 
    String name = f.getName().substring(0,i); 
    return new File(f.getParent() + "/" + name + newExtension); 
} 

यह केवल परिवर्तन पिछले विस्तार एक फ़ाइल नाम के लिए, archive.tar.gz अर्थात् .gz हिस्सा। इससे पहले यह लिनक्स छिपी हुई फाइलों के साथ ठीक काम करता है, जिसके लिए नाम . से शुरू होता है यह बहुत सुरक्षित है क्योंकि getParent()null (यानी माता-पिता सिस्टम रूट होने की स्थिति में) लौटाता है, यह खाली स्ट्रिंग पर "कास्ट" होता है फ़ाइल कन्स्ट्रक्टर को पूरा तर्क पहले मूल्यांकन किया जाता है।

एकमात्र मामला जहां आपको एक मजाकिया आउटपुट मिलेगा, यदि आप सिस्टम रूट को स्वयं फ़ाइल का प्रतिनिधित्व करते हैं, तो null शेष पथ स्ट्रिंग पर प्रीपेड किया गया है।

4

यह कैसे मैं फ़ाइलों का नाम बदलें या इसके विस्तार को बदलने के लिए प्रयोग किया जाता है:

+0

हाय जॉन। वही दृष्टिकोण जो मैं वर्तमान में उपयोग कर रहा हूं। मैं क्या करना चाहता हूं कि मैं जिपर और अनजिपर कार्यक्षमता का अलग-अलग उपयोग कर सकता हूं। उस स्थिति में मेरे पास फ़ाइल का विस्तार नहीं होगा। – rahul0789

+7

indexOf काम नहीं करता है। इसके बजाय lastIndexOf() का प्रयास करें। ऐसा इसलिए है क्योंकि आखिरी "।" के बाद केवल पाठ एक्सटेंशन है और एक फ़ाइल में एकाधिक "।" हो सकता है वर्ण। इसके अलावा, अंत से खोज करना, आमतौर पर तेज़ एक्सटेंशन को खोजने के लिए तेज़ है – brunoais

+0

मैं दो बदलाव कर दूंगा: ए) नया एक्सटेंशन को नया एक्सटेंशन के रूप में नाम दें, विथडॉट बी) नई फ़ाइल (f.getParent(), name + newExtension) लौटाएं; // "/" केवल यूनिक्स संगत है, इसलिए कोड हर जगह उपयोग किया जा सकता है। – BitLauncher

0
FilenameUtils.getFullPathNoEndSeparator(doc.getDocLoc()) + "/" + 
    FilenameUtils.getBaseName(doc.getDocLoc()) + ".xml" 
0

मैं जांचता हूं कि फ़ाइल बदलने से पहले एक एक्सटेंशन है या नहीं। समाधान नीचे ([FilenameUtils] विस्तार के बिना फाइल या कई एक्सटेंशन

public File changeExtension(File file, String extension) { 
    String filename = file.getName(); 

    if (filename.contains(".")) { 
     filename = filename.substring(0, filename.lastIndexOf('.')); 
    } 
    filename += "." + extension; 

    file.renameTo(new File(file.getParentFile(), filename)); 
    return file; 
} 

@Test 
public void test() { 
    assertThat(changeExtension(new File("C:/a/aaa.bbb.ccc"), "txt"), 
          is(new File("C:/a/aaa.bbb.txt"))); 

    assertThat(changeExtension(new File("C:/a/test"), "txt"), 
          is(new File("C:/a/test.txt"))); 
} 
संबंधित मुद्दे