欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于renameTo方法的疑惑

程序员文章站 2022-04-22 16:09:33
...
想用java实现一个移动文件的功能,看到api里面说File类有一个renameTo的方法。可以重命名文件,这个操作就相当于移动文件。看起来感觉不错。在使用这个方法时发现了一些问题。
代码如下:

package fileOperation;

import java.io.File;
/**
*
* @author wakin
*
*/
public class MoveFile {
/**
* 测试移动文件,如果源文件不存在则抛出运行期异常。用renameTo来实现
* 文件或目录的移动,true表示操作成功。
* @param source_name
* @param dest_name
* @return
*/
public boolean moveFile(String source_name,String dest_name) {
File source_file = new File(source_name);
File dest_file = new File(dest_name);
if(!source_file.exists())
throw new RuntimeException("Move: no such file"+source_name);
return source_file.renameTo(dest_file);
}

}

我测试环境 OS XP sp2 两个盘。C和D 均是ntfs格式的。
当输入moveFile("c:/1.txt","D:/11.txt")时,通过。
当输入moveFile("c:/1","c:/11")时,通过。
当输入moveFile("c:/1","D:/11")时,失败。
测试多次后发现只要是跨盘移动目录是都是无法通过。查看api,定义如下:
renameTo
public boolean renameTo(File dest)重新命名此抽象路径名表示的文件。
此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。
参数:
dest - 指定文件的新抽象路径名
返回:
当且仅当重命名成功时,返回 true;否则返回 false

疑问:我的两个盘都是ntfs格式的啊,应该不存在跨文件系统的问题,但是为什么不能通过呢?在网上找了半天也没什么解决办法。写在博客里,希望明白的人能赐教。呵呵。