我想将文件夹的所有内容复制到SDCard上的另一个文件夹。 我想在操作系统级别执行此操作。我尝试使用以下命令: cp -a / source /。 / dest / ,这不起作用,它说 权限被拒绝 ,因为我的设备没有root。然而有趣的是它允许我执行 rm - r source
String deleteCmd = "rm -r " + sourcePath;
Runtime delete_runtime = Runtime.getRuntime();
try {
delete_runtime.exec(deleteCmd);
} catch (IOException e) {
Log.e("TAG", Log.getStackTraceString(e));
}
请告诉我,如果我能在操作系统级别实现此目的,我的最后手段将是LINK。 提前谢谢。
答案 0 :(得分:1)
经过更多的研究,我找到了符合我要求的完美解决方案。文件副本极其快速。
mv 命令对我有用,它将源文件夹中的所有文件移动到目标文件夹,复制后删除源文件夹。
String copyCmd = "mv " + sourcePath + " " + destinationPath;
Runtime copy_runtime = Runtime.getRuntime();
try {
copy_runtime.exec(copyCmd);
} catch (IOException e) {
Log.d("TAG", Log.getStackTraceString(e));
}
答案 1 :(得分:0)
您的错误是“权限被拒绝”,要么您没有执行“cp”二进制文件的权限,要么您没有权限在SD卡或其他可能出错的内容中创建目录。
使用adb shell了解有关cp命令的更多信息,它位于/ system / bin /.
或者
您可以下载终端模拟器应用程序并尝试从shell运行命令。
使用ls -l / system / bin检查权限。
除此之外,不要忘记你的SD卡有FAT文件系统,而cp -a使用chmod和utime的组合,这也可能超出你的权限范围。而且我不是在谈论在FAT上做chmod并不是一个好主意。除非您完全理解您在此处遇到的问题,否则我还建议您使用您提供的LINK。
答案 2 :(得分:-1)
public void copyDirectory(File sourceLocation , File targetLocation)
throws IOException {
if (sourceLocation.isDirectory()) {
if (!targetLocation.exists() && !targetLocation.mkdirs()) {
throw new IOException("Cannot create dir " + targetLocation.getAbsolutePath());
}
String[] children = sourceLocation.list();
for (int i=0; i<children.length; i++) {
copyDirectory(new File(sourceLocation, children[i]),
new File(targetLocation, children[i]));
}
} else {
// make sure the directory we plan to store the recording in exists
File directory = targetLocation.getParentFile();
if (directory != null && !directory.exists() && !directory.mkdirs()) {
throw new IOException("Cannot create dir " + directory.getAbsolutePath());
}
InputStream in = new FileInputStream(sourceLocation);
OutputStream out = new FileOutputStream(targetLocation);
// Copy the bits from instream to outstream
byte[] buf = new byte[1024];
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
out.close();
}
}