17

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

4

7 回答 7

14

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

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

编辑:约翰的方法重命名文件(保留扩展名)。要更改扩展名,请执行以下操作:

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

这只会更改文件名的最后一个扩展名,即.gz. archive.tar.gz因此,它适用于名称以 a 开头的 Linux 隐藏文件,. 这是非常安全的,因为如果getParent()返回null(即,如果父项是系统根目录),它会“强制转换”为空字符串作为首先评估 File 构造函数。

你会得到一个有趣的输出的唯一情况是如果你传入一个代表系统根本身的文件,在这种情况下,它会null被附加到路径字符串的其余部分。

于 2012-08-31T06:36:50.973 回答
8

尝试:

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
}
于 2012-08-31T06:20:20.153 回答
4

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

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")));
}
于 2017-07-10T08:24:23.737 回答
1

我想避免新扩展恰好位于路径或文件名本身中。我喜欢 java.nio 和 apache StringFilenameUtils 的组合。

public void changeExtension(Path file, String extension) throws IOException {
    String newFilename = FilenameUtils.removeExtension(file.toString()) + EXTENSION_SEPARATOR_STR + extension;
    Files.move(file, Paths.get(newFilename, StandardCopyOption.REPLACE_EXISTING));
}
于 2019-12-31T16:47:37.950 回答
0
FilenameUtils.getFullPathNoEndSeparator(doc.getDocLoc()) + "/" +
     FilenameUtils.getBaseName(doc.getDocLoc()) + ".xml"
于 2016-04-26T10:38:11.707 回答
0

如果您使用的是 Kotlin,则可以从file对象的此属性中使用:

file.nameWithoutExtension + "extension"
于 2022-01-30T12:12:30.817 回答
0

通过与@hsz 提到的相同逻辑,但只需使用替换:

File file  = new File("fileName.fileExtension"); // creating object of File 
String str = file.getPath().replace(".fileExtension", ".zip"); // replacing extension to another 
file.renameTo(new File(str)); 
于 2019-06-14T01:29:25.370 回答