当前位置: 代码迷 >> Android >> 写文件浏览器时,搬动和复制文件为什么没执行
  详细解决方案

写文件浏览器时,搬动和复制文件为什么没执行

热度:50   发布时间:2016-04-28 03:48:55.0
写文件浏览器时,移动和复制文件为什么没执行?
我在写文件浏览器时,移动和复制文件在执行时也没报错,为什么没有执行成功,目标文件夹里没有移动和复制的文件,请问这是什么原因造成的。
File src = new File(filePath);
move = src.renameTo(new File(targetPath));

还有就是复制文件
public static void copyFile(File src, File target) {
    //判断是否为文件夹
            if (src.isDirectory()) {
                    if (!target.exists()) {
                            target.mkdir();
                    }
                    // 复制文件夹
                    File[] currentFiles;
                    currentFiles = src.listFiles();
                    for (int i = 0; i < currentFiles.length; i++) {
                            // 如果当前为子目录则递归
                            if (currentFiles[i].isDirectory()) {
                                    copyFile(new File(currentFiles[i]+"/"), new File(target.getAbsolutePath()
                                                    + "/" + currentFiles[i].getName()+"/"));
                            } else {
                                    copyFile(currentFiles[i], new File(target.getAbsolutePath()
                                                    + "/" + currentFiles[i].getName()));
                            }
                    }

            } else {
                    // 创建输入输出流
                    InputStream in = null;
                    OutputStream out = null;
                    // 创建缓存字节流
                    BufferedInputStream bin = null;
                    BufferedOutputStream bout = null;
                    try {
                            // 创建实例
                            in = new FileInputStream(src);
                            out = new FileOutputStream(target);
                            bin = new BufferedInputStream(in);
                            bout = new BufferedOutputStream(out);

                            byte[] b = new byte[8192];// 用于缓存的字节数组
                            int len = bin.read(b);// 获取读取到的长度
                            while (len != -1)// 判断是否读取到尾部
                            {
                                    bout.write(b, 0, len);
                                    len = bin.read(b);
                            }

                    } catch (FileNotFoundException e) {
                            e.printStackTrace();
                    } catch (IOException e) {
                            e.printStackTrace();
                    } finally {
                            try {
                                    if (bin != null) {
                                            bin.close();
                                    }
                                    if (bout != null) {
                                            bout.close();
                                    }
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }
                    }

            }

    }

这个方法我在测试时能复制成功,但是在AVD中就不行,也不提示错误,请高解惑
------解决思路----------------------
找真机测试或看下模拟器sdcard目录,代码看起来没错
------解决思路----------------------
没有在目标文件夹新建文件,new File并不会建立文件。

------解决思路----------------------
引用:
引用
没有在目标文件夹新建文件,new File并不会建立文件。

怎么操作可以详细的说一下吗,多谢了!

是我搞错了,net FileOutputStream(file)会创建文件。
关于你遇到的问题,除了要检查一下权限,还要检查一下目标路径。
你的函数实现不会创建多级目标目录。
假设你的目标路径是"/a/b/c/d",但是"/a/b/c"这个路径不存在,则不会创建"/a/b/c/d"这个文件夹;只有"/a/b/c"存在,才会创建"/a/b/c/d"。
------解决思路----------------------
引用:
Quote: 引用:

引用
没有在目标文件夹新建文件,new File并不会建立文件。

怎么操作可以详细的说一下吗,多谢了!

是我搞错了,net FileOutputStream(file)会创建文件。
关于你遇到的问题,除了要检查一下权限,还要检查一下目标路径。
你的函数实现不会创建多级目标目录。
假设你的目标路径是"/a/b/c/d",但是"/a/b/c"这个路径不存在,则不会创建"/a/b/c/d"这个文件夹;只有"/a/b/c"存在,才会创建"/a/b/c/d"。

要创建多级目录,把target.mkdir()改成target.mkdirs()就可以。

------解决思路----------------------
没有在目标文件夹新建文件
------解决思路----------------------
引用:
有高手解释祥细点吗?

我试了可以复制的。
之前已经告诉你要创建多级目录,把target.mkdir()改成target.mkdirs()就可以。
  相关解决方案