`
wakin2003
  • 浏览: 67434 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

关于renameTo方法的疑惑

阅读更多
想用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格式的啊,应该不存在跨文件系统的问题,但是为什么不能通过呢?在网上找了半天也没什么解决办法。写在博客里,希望明白的人能赐教。呵呵。
1
0
分享到:
评论
1 楼 Aaron2010 2012-03-15  
我现在也碰到同样的问题,重命名webapps下面的文件夹名称,使用rename有一定的失败率,项自己写一个不实用renameTo方法的文件夹重命名方法

相关推荐

Global site tag (gtag.js) - Google Analytics