关于renameTo方法的疑惑
程序员文章站
2022-04-22 16:09:33
...
想用java实现一个移动文件的功能,看到api里面说File类有一个renameTo的方法。可以重命名文件,这个操作就相当于移动文件。看起来感觉不错。在使用这个方法时发现了一些问题。
代码如下:
我测试环境 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格式的啊,应该不存在跨文件系统的问题,但是为什么不能通过呢?在网上找了半天也没什么解决办法。写在博客里,希望明白的人能赐教。呵呵。
代码如下:
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格式的啊,应该不存在跨文件系统的问题,但是为什么不能通过呢?在网上找了半天也没什么解决办法。写在博客里,希望明白的人能赐教。呵呵。