HDDCopy文件拷貝程序總結

主要有兩個地方值得探討:
  • 獲取目錄大小,採用非遞歸遍歷目錄所有文件求出所有文件大小總和,這省去了函數調用的棧操作,提高了效率
  • 使用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爲獲取系統信息的輔助類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章