您的位置:首页 > 编程语言 > Java开发

java中使用renameTo函数的相关经验

2011-10-17 11:54 435 查看
最近在做新的项目,发现了一个问题:在java中使用reNameTo函数有时候会失败。找了很长时间的问题,也没有一个确切的答案。

在java底层的api中对此函数的使用有说明——使用时要关心一下操作系统使用的文件系统,于是想想就别用了。

既然是重命名,那就用“先拷贝在删除”的操作来替代renameto函数。代码很简单,如下:

public class FileTools {

private static Logger _log = Logger.getLogger(FileTools.class);
/**
* 文件重命名

* @param oldname
* @param newname
*/
public static void reNameFile(String oldname, String newname){
_log.debug("reNameFile1");
try{
FileUtils.copyFile(new File(oldname), new File(newname));
_log.debug("reNameFile2");
// 删除原文件
new File(oldname).deleteOnExit();
_log.debug("reNameFile3");
}catch(IOException ioex){
_log.error("文件重命名失败:", ioex);
}
_log.debug("reNameFile4");
}

public static void main(String[] args) throws IOException, InterruptedException {
InputStream input = new FileInputStream(new File("d:\\wujh.cfg"));
_log.debug(input.read());
_log.debug("main1");
reNameFile("d:\\wujh.cfg", "d:\\wujh1.cfg");
_log.debug("main2");
Thread.sleep(50000);
_log.debug(input.read());
_log.debug("main3");
input.close();
}
}


我觉得如果有文件被打开的时候再去删除文件就会报错,但是我的想法是错误的,执行结果如下

2011-10-17 11:52:27,656-[main][DEBUG]-[FileTools]83
2011-10-17 11:52:27,656-[main][DEBUG]-[FileTools]main1
2011-10-17 11:52:27,656-[main][DEBUG]-[FileTools]reNameFile1
2011-10-17 11:52:27,672-[main][DEBUG]-[FileTools]reNameFile2
2011-10-17 11:52:27,672-[main][DEBUG]-[FileTools]reNameFile3
2011-10-17 11:52:27,672-[main][DEBUG]-[FileTools]reNameFile4
2011-10-17 11:52:27,672-[main][DEBUG]-[FileTools]main2
2011-10-17 11:53:17,686-[main][DEBUG]-[FileTools]68
2011-10-17 11:53:17,686-[main][DEBUG]-[FileTools]main3

从执行结果可以看出reNameFile函数已经执行完成了但是被删除的文件的内容还是能够被读取出来的,最后看了一下文件的变化情况,发现:reNameFile函数虽然执行完成但是文件却没有被删除,直到close后才被删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: