Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 复制目录-制定进度_Java_Android_Backup - Fatal编程技术网

Java 复制目录-制定进度

Java 复制目录-制定进度,java,android,backup,Java,Android,Backup,我有一个例程,我已经使用了一段时间,将目录从SD卡复制到插入式USB驱动器。这是可行的,但因为可以有3000张照片,我相信你会觉得有点慢。所以我试图实现某种更新进度条 这是我进行复制的代码 public void copyDirectory(File sourceLocation , File targetLocation) throws IOException { Log.e("Backup", "Starting backup");

我有一个例程,我已经使用了一段时间,将目录从SD卡复制到插入式USB驱动器。这是可行的,但因为可以有3000张照片,我相信你会觉得有点慢。所以我试图实现某种更新进度条

这是我进行复制的代码

public void copyDirectory(File sourceLocation , File targetLocation)
            throws IOException {

        Log.e("Backup", "Starting backup");
        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 {

            Log.e("Backup", "Creating backup directory");
            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);

            byte[] buf = new byte[1024];
            int len;
            while ((len = in.read(buf)) > 0) {
                out.write(buf, 0, len);
            }
            in.close();
            out.close();
            Log.e("Backup", "Finished");

        }

    }
但我猜,我不知道如何把A和B组合在一起。我不知道如何在更新的正确位置增加。-我可能走错了路!任何提示都将不胜感激。


参见上面的链接异步任务加载概念将帮助您

您是否也在复制子目录?是的,所有子目录。它本质上是一个工作备份,可能还需要对子目录中的文件进行计数(递归countFilesInDirectory调用if(file.isDir())您好-我已经在后台的异步任务中运行了它,并在备份前后更新了通知区域。但这正是我想添加进度条的地方。因此,我正在尝试解决当前步骤无忧:-)我很感激在计算照片时输入的信息,它需要显示进度条中的百分比?是的,基本上是给正在备份的用户一个指示,表明它实际上仍在工作。等待40分钟,而它只是说跑步还不够好
    public static int CountFilesInDirectory(String location) {
        File f = new File(location);
        int count = 0;
        for (File file : f.listFiles()) {
                if (file.isFile()) {
                        count++;
                }
        }

        return count; 

}