Java文件重命名失败原因,File.renameTo与Files.move比较

File.renameTo

Java File对象的boolean renameTo(File dest)方法可以用来移动/重命名文件。需要注意的是renameTo依赖于底层操作系统实现,会有操作失败但不抛出异常的情况。因此,需要判断其boolean类型返回值。

操作失败可能的原因:

  1. 要移动/重命名的文件本身就不存在(return false)。

  2. 如果目标文件已存在,且不能被覆盖。这种情况,如果确实要覆盖,可以先删除目标文件;或者可以用JDK1.7提供的Files.move。

  3. 移动文件时,有其它打开此文件的句柄,比如bufferedWriter保持着对文件的访问,没有关闭,这会导致移动失败。

  4. 目标文件的文件名中含有特殊字符,当前操作系统不支持这样的文件名。会报

    java.nio.file.InvalidPathException: Illegal char <:> at index 9: D:/test/a:new.txt
    

Files.move

推荐使用JDK1.7开始提供的Files.move:

java.nio.file.Files.move(Path source, Path target, CopyOption... options) throws IOException
static String name = "D:/test/a.txt";
static String outName = "D:/test/a_new.txt";
public static void testFilesMove() throws IOException {
    Path src = Paths.get(name);
    Path dest = Paths.get(outName);
    Files.move(src, dest, StandardCopyOption.REPLACE_EXISTING);
}

两者对比

情况\方法File.renameToFiles.move
1. 要移动/重命名的文件本身就不存在return falsejava.nio.file.NoSuchFileException
2. 如果目标文件已存在,且不能被覆盖return false指定REPLACE_EXISTING参数可覆盖
3. 移动文件时,有其它打开此文件的句柄return falsejava.nio.file.FileSystemException: 另一个程序正在使用此文件,进程无法访问。
4. 目标文件名中含有操作系统不支持的特殊字符InvalidPathExceptionPaths.get()会报InvalidPathException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值