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

rah*_*789 7 java file-rename

我正在尝试实现压缩和解压缩文件的程序.我想要做的就是压缩文件(fileName.fileExtension),其名称为fileName.zip,并在解压缩时再次将其更改为fileName.fileExtension.

hsz*_*hsz 5

尝试:

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
}
Run Code Online (Sandbox Code Playgroud)


Joh*_*ohn 5

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

public static void modify(File file) 
    {
        int index = file.getName().lastIndexOf(".");
        //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));
    }
Run Code Online (Sandbox Code Playgroud)

编辑: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);
}
Run Code Online (Sandbox Code Playgroud)

这只会将最后一个扩展名更改为文件名,即文件名的.gz一部分archive.tar.gz.因此它可以正常使用linux隐藏文件,其名称以a开头.. 这是非常安全的,因为如果getParent()返回null(即在父类是系统根的情况下)它被"转换"为空字符串作为整个参数首先评估File构造函数.

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

  • indexOf不起作用.请尝试使用lastIndexOf().那是因为只有最后一个"."之后的文字.是扩展名,文件可以有多个"." 字符.此外,从最后搜索通常更快找到该扩展名 (7认同)

小智 5

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

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")));
}
Run Code Online (Sandbox Code Playgroud)

  • 对于“/aaa.bbb/ccc”等路径失败。:-/ 这些事情确实很重要。 (3认同)