如何在运行时更改文件扩展名

我正在尝试实现压缩和解压缩文件的程序。 我想要做的就是压缩一个文件(fileName.fileExtension) ,其名称为fileName.zip,并在解压缩时再将其更改为fileName.fileExtension 。 谁有人告诉我这样做的方法?

这就是我用来重命名文件或更改其扩展名的方法。

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

编辑 :John的方法重命名文件(保留扩展名)。 要更改扩展名:

 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部分。 因此,它可以正常使用linux隐藏文件,其名称以a开头. 这是非常安全的,因为如果getParent()返回null (即,在父节点是系统根的情况下),它将被“转换”为空String,因为首先计算File构造函数的整个参数。

您将获得有趣输出的唯一情况是,如果您传入表示系统根本身的文件,在这种情况下, null被添加到路径字符串的其余部分。

试试:

 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 } 

如果文件在更改之前有扩展名,我会检查。 下面的解决方案也适用于没有扩展名或多个扩展名的文件

 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"))); } 
 FilenameUtils.getFullPathNoEndSeparator(doc.getDocLoc()) + "/" + FilenameUtils.getBaseName(doc.getDocLoc()) + ".xml"