最近在做一个Android上面的一个文件管理器的apk,有文件名重命名和剪切的功能。
一般的思路如下:
重命名:先新建一个文件,复制原先的文件,读写文件,最后删除原先文件
剪切:先复制原先的文件,删除原先文件
以上方法是有bug的,如果磁盘的空间不够的话, 则会出现错误。同时Java的File类中提供重名和剪切的功能。,原先怎么没有发现呢。
下面是Java Api中的方法介绍
renameTopublic boolean renameTo(Filedest)
重新命名此抽象路径名表示的文件。
此方法行为的许多方面都是与平台有关的:重命名操作无法将一个文件从一个文件系统移动到另一个文件系统,该操作不是不可分的,如果已经存在具有目标抽象路径名的文件,那么该操作可能无法获得成功。应该始终检查返回值,以确保重命名操作成功。
参数:dest
– 指定文件的新抽象路径名 返回:当且仅当重命名成功时,返回 true
;否则返回 false
抛出: SecurityException
– 如果存在安全管理器,且其
方法拒绝对原路径名和新路径名进行写访问SecurityManager.checkWrite(java.lang.String)
NullPointerException
– 如果参数dest
为 null
但是要注意目标文件dest那个目录必须要存储。
但是还有个问题,我们公司使用的是mtk的解决方案,手机内部也有个默认存储空间,还支持扩展sdcard,如果file1剪切到file2,且file1和file2不是同一个sdcard里面的,那么就会操作失败,不知道是为什么,,如果有人实现同样的功能需要注意下。
遇到这样的情况,只能使用上面的笨方法了。不过在操作前需要检测可用空间,防止出现错误,这个是程序员的本分嘛。
如果复制或者是剪切的是目录,也就是文件夹的话,那么需要循环遍历了,循环的穿件文件夹了,反正挺复杂的,。
当你感到悲哀痛苦时,最好是去学些什么东西。