2012-08-31 30 views
6

Bir dosyayı sıkıştırmak ve açmak için programı çalıştırmaya çalışıyorum. Tüm yapmak istediğim dosya (fileName.fileExtension) dosya adı dosyaAdı.zip ve unzipping için yeniden dosyaAdı.FileExtension. Bana bunu yapmanın bir yolu var mı?Çalışma zamanında dosya uzantısını değiştirme

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

ile de http://commons.apache.org/io/api-1.4/org/apache/commons/ çalışır io/FilenameUtils.html) –

+0

[File.renameTo] okumaya başladım (http://docs.oracle.com/javase/7/docs/api/java/io/File.html#renameTo (java.io .File)) – MadProgrammer

+0

@Nandkumar: Teşekkürler, benim için faydalı olacağını düşünüyorum. Ancak sorun, dosyayı daha sonra açabileceğim gibi görünüyor (başka bir oturumda olabilir). Önceki uzantıyı nasıl korurum? – rahul0789

cevap

4

ile deneyin.

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

düzenlemek: John yöntem dosyası (uzantısı tutmak) adlandırır. uzantısını değiştirmek için yapın:

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

Bu yalnızca değişiklikleri bir dosya adına son uzantısını, archive.tar.gz yani .gz bölümünü. Bu nedenle, adının bir . ile başladığı linux gizli dosyaları ile iyi çalışır Bu, getParent(), null döndürdüğü için (yani, ebeveynin sistem kökü olması durumunda) boş bir Dize için "döküm" olduğu için oldukça güvenlidir. Dosya yapıcısına yapılan tüm argüman ilk önce değerlendirilir.

Komik bir çıktı elde edeceğiniz tek durum, sistem kökü kendisini temsil eden bir Dosyayı iletirseniz, bu durumda null yol dizesinin kalanına eklenir.

4

Bu benim dosyaları yeniden adlandırmak ya da uzantısını değiştirmek için kullanılan nasıl:

+0

Merhaba John. Şu anda kullandığım aynı yaklaşım. Yapmak istediğim şey, fermuar ve unzipper işlevselliğini ayrı ayrı kullanabilmem. Bu durumda, dosyanın uzantısına sahip olmayacağım. – rahul0789

+7

indexOf çalışmıyor. Bunun yerine lastIndexOf() öğesini deneyin. Bunun nedeni sadece son metinden sonraki metnin "." uzantısı ve bir dosya birden çok "olabilir". karakter. Ayrıca, sonunda arama, genellikle, bu uzantı – brunoais

+0

bulmak için daha hızlı iki değişiklik yapar: a) newExtensionWithDot olarak newExtension adı b) yeni dosya döndür (f.getParent(), name + newExtension); // "/" sadece Unix uyumludur, bu yüzden kod her yerde kullanılabilir. – BitLauncher

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

Dosya değiştirmeden önce bir uzantıya sahipse, kontrol ederim. Çözelti aşağıda ([FilenameUtils], uzantısı olmadan dosya veya birden uzantıları

io için Apache API kontrol
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"))); 
} 
İlgili konular