为了账号安全,请及时绑定邮箱和手机立即绑定

java.io.File.renameTo会删除源文件?

java.io.File.renameTo会删除源文件?

12345678_0001 2019-03-22 18:15:09
现在我有一个操作,需要调用java.io.File.renameTo这个方法重命名文件。实现代码大致如下,public void reNameFile() {File file = new File("C:\folderA\sample.zip");File newFile = new File("C:\folderB\sample.zip");boolean reNameOK = file.renameTo(newFile);boolean deleteOK = file.delete();if (reNameOK) {System.out.println("rename ok");}if((deleteOK){System.out.println("delete ok");}我发现在调用renameTo之后,在把sample.zip放到folderB中的同时,folderA中的sample.zip也被删除了,这样一来当调用delete的时候,返回值deleteOK就是false。这是我在windows下测试的结果,不知道在linux下是怎么样的。如果renameTo在linux下也能删除源文件,是不是就不需要调用delete了?
查看完整描述

2 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

:D 这个方法实际在linux下有可能会失败。不能保证不同平台下一样好用!~~不建议使用。由于安全性及系统盘符所使用的文件格式不一样导制失败(NTFS、FAT32)!
commons-io包里面的
[code="java"]FileUtils.copyFile(File,File)[/code]

自己写个copy的方法也是个不错的选择!


查看完整回答
反对 回复 2019-04-26
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

API文档的解释如下:

public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。

此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作可能不是原子的,如果已经存在具有目标抽象路径名的文件,则该操作可能无法获得成功。应该始终检查返回值,确保重命名操作成功。

参数: 
dest - 指定文件的新抽象路径名

返回: 
当且仅当重命名成功时,返回 true;否则返回 false

抛出:

SecurityException - 如果存在安全管理器,且其 SecurityManager.checkWrite(java.lang.String) 方法拒绝对原来的和新的路径名进行写入访问

NullPointerException - 如果参数 dest 为 null

File src = new File( "C:/a.txt "); 
File dst = new File( "C:/b.txt "); 
src.renameTo(dst);这样就可以成功啦


查看完整回答
反对 回复 2019-04-26
  • 2 回答
  • 0 关注
  • 1088 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号