将文件夹的内容复制到OS级别的SD卡上的另一个文件夹中?

时间:2014-01-06 10:59:30

标签: android android-kernel

我想将文件夹的所有内容复制到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。 提前谢谢。

3 个答案:

答案 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();
    }
}