先看Java编程实战经典中的一道习题:
编写程序,程序运行时输入目录名称,并把该目录下的所有文件名后缀修改成.txt。
按照题意,我在d盘新建了文件夹test,并在该文件夹下新建了一个文件file.d。接着我写了如下程序
import java.io.File; import java.util.Scanner; public class Ex09 { public static void main(String[] args) { // TODO Auto-generated method stub // Scanner scan = new Scanner(System.in); // String dirname = scan.nextLine(); // scan.close(); String dirname = null; dirname = "d:"+File.separator+"test"; File f = new File(dirname); if (f.isDirectory()) { File[] fileList = f.listFiles(); for (File file : fileList) { if (file.isFile()) { String suffix = file.getName().substring( file.getName().lastIndexOf('.')+1); if (false == "txt".equals(suffix)) { String destName = file.getName().substring( 0,file.getName().lastIndexOf('.')); File dest = new File(destName+".txt"); file.renameTo(dest); } } } } } }
经检查,程序没有什么问题,但是文件后缀并没有被修改。
后来检查才发现
File dest = new File(destName+".txt"); 这样写虽然不会报错,但是不能表示文件的具体存储位置,需要指明文件的绝对地址才行,
改成如下代码后问题解决。
import java.io.File;
import java.util.Scanner;
public class Ex09 {
public static void main(String[] args) {
// TODO Auto-generated method stub
// Scanner scan = new Scanner(System.in);
// String dirname = scan.nextLine();
// scan.close();
String dirname = null;
dirname = "d:"+File.separator+"test";
File f = new File(dirname);
if (f.isDirectory()) {
File[] fileList = f.listFiles();
for (File file : fileList) {
if (file.isFile()) {
String suffix = file.getName().substring(
file.getName().lastIndexOf('.')+1);
if (false == "txt".equals(suffix)) {
String s = file.getParent();
String destName = file.getName().substring(
0,file.getName().lastIndexOf('.'));
File dest = new File(s+file.separator+destName+".txt");
file.renameTo(dest);
}
}
}
}
}
}
可以看出, renameTo这个函数是可以实现将文件重命名和文件移动的功能的。