2012-08-31 13 views
6

Sto cercando di implementare il programma per comprimere e decomprimere un file. Tutto quello che voglio fare è comprimere un file (fileName.fileExtension) con nome come fileName.zip e in decompressione modificarlo nuovamente in fileName.fileExtension. Qualcuno può dirmi un modo per farlo?Come cambiare l'estensione del file in fase di esecuzione

+0

controllare Apache API per IO, [FilenameUtils] (http://commons.apache.org/io/api-1.4/org/apache/commons/ io/FilenameUtils.html) –

+0

Vorrei iniziare leggendo [File.renameTo] (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#renameTo (java.io .File)) – MadProgrammer

+0

@Nandkumar: Grazie penso che sarà utile per me. Ma il problema sembra che io possa decomprimere il file in qualsiasi momento successivo (potrebbe essere in un'altra sessione). Come preservare la sua estensione precedente? – rahul0789

risposta

4

Prova con:

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 
} 
4

Questo è il modo che ho usato per rinominare i file o cambiare la sua estensione.

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

modificare: il metodo di Giovanni rinomina il file (mantenendo l'estensione). Per modificare l'estensione fare:

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

Questo solo cambiamenti l'ultima estensione ad un nome di file, vale a dire la parte di .gzarchive.tar.gz. Quindi funziona bene con i file nascosti di Linux, per i quali il nome inizia con un . Questo è abbastanza sicuro perché se getParent() restituisce null (cioè nel caso in cui il padre sia la root di sistema) è "cast" su una stringa vuota come l'intero argomento del costruttore File viene valutato per primo.

L'unico caso in cui si otterrà un output divertente è se si passa in un file che rappresenta la radice del sistema stesso, nel qual caso il null viene aggiunto al resto della stringa del percorso.

+0

Ciao John. Lo stesso approccio che sto usando attualmente. Quello che voglio fare è che posso usare separatamente le funzionalità zipper e unzipper. In tal caso non avrò l'estensione del file. – rahul0789

+7

indexOf non funziona. Prova invece lastIndexOf(). Questo perché solo il testo dopo l'ultimo "." è l'estensione e un file può avere più "." personaggi. Inoltre, la ricerca dalla fine è, solitamente, più veloce per trovare quell'estensione – brunoais

+0

Farei due modifiche: a) nome newExtension come newExtensionWithDot b) return new File (f.getParent(), name + newExtension); // "/" è compatibile solo con Unix, quindi il codice può essere utilizzato ovunque. – BitLauncher

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

Vorrei verificare, se il file ha un'estensione prima di cambiare. La soluzione qui di seguito funziona anche con i file senza estensione o più estensioni

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"))); 
} 
Problemi correlati