我正在尝试实现压缩和解压缩文件的程序.我想要做的就是压缩文件(fileName.fileExtension),其名称为fileName.zip,并在解压缩时再次将其更改为fileName.fileExtension.
尝试:
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)
这就是我用来重命名文件或更改其扩展名的方法.
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被添加到路径字符串的其余部分.
小智 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)