HDDCopy文件拷贝程序总结

来源:互联网 发布:java有哪些集合类 编辑:程序博客网 时间:2024/06/13 07:29
主要有两个地方值得探讨:
  • 获取目录大小,采用非递归遍历目录所有文件求出所有文件大小总和,这省去了函数调用的栈操作,提高了效率
  • 使用Runtime.getRuntime().exec()调用本地程序
根据需求需要拷贝TF卡HDD目录下所有文件和文件夹到内部存储的指定目录(默认为/mnt/sdcard/),拷贝命令的设计成这样:“cp -rf  /mnt/sdcard/external_sd/HDD/*   /mnt/sdcard/”,没有通配符*号的拷贝的话,直接可以使用Runtime.getRuntime().exec(“cp -rf  /mnt/sdcard/external_sd/HDD/   /mnt/sdcard/”)便完事,但这会在目标目录新建一个HDD目录,这不符合需求,所有必须加*号,此时直接Runtime.getRuntime().exec(“cp -rf  /mnt/sdcard/external_sd/HDD/*  /mnt/sdcard/”)便会执行不成功,通过获取输入输出流会发现提示cp:cp:can't stat /mnt/sdcard/test/*:No such file or directory,这是因为使用Runtime.getRuntime().exec(“ cp -rf  /mnt/sdcard/external_sd/HDD/*  /mnt/sdcard/ ”)执行命令不等于console命令,它只是调用cp这个程序并传入相关的参数,而cp程序本身并不具备解析通配符*号的能力,在shell直接敲“cp -rf  /mnt/sdcard/external_sd/HDD/*  /mnt/sdcard/”是能正确执行的,shell会解析 “cp -rf  /mnt/sdcard/external_sd/HDD/* ”,然后多次调用cp拷贝HDD/目录下所有文件和目录,所以解决的办法是Runtime.getRuntime().exec(new String[]{"sh""-c" “cp -rf  /mnt/sdcard/external_sd/HDD/*  /mnt/sdcard/” }),此时调用的sh程序,“cp -rf  /mnt/sdcard/external_sd/HDD/ *  /mnt/sdcard/” 这条命令当做参数传递给了sh,这时就相当于在控制台敲命令执行了



程序代码结构:

其中
最主要的是HDDCopyActivity.java界面和流程控制
MitechFilesInfo.java张工写的获取文件信息的辅助类
SystemProperties.java为获取系统信息的辅助类
0 0
原创粉丝点击