在我的android应用程序中,file.exists函数有问题。下面是我得到两个变量的函数。from是文件的完整路径,to是必须复制文件的目录的路径。例如
from == "/mnt/sdcard/Media/Image/Abstact wallpapers/abstraction-360x640-0033.jpg";
to == "/mnt/sdcard";

public static boolean copyFile(String from, String to) {
            File sd = Environment.getExternalStorageDirectory();
            if (sd.canWrite()) {
                int end = from.toString().lastIndexOf("/") - 1;
                String str1 = from.toString().substring(0, end);
                String str2 = from.toString().substring(end+2, from.length());
                File source = new File(str1, str2);
                File destination= new File(to, str2);
                if (source.exists()) {
                    FileChannel src = new FileInputStream(source).getChannel();
                    FileChannel dst = new FileOutputStream(destination).getChannel();
                    dst.transferFrom(src, 0, src.size());
                    src.close();
                    dst.close();
                }
            }
            return true;
        } catch (Exception e) {
            return false;
        }
    }

调试时,if (source.exists())返回false,但具有此路径的文件存在。我做错什么了?

最佳答案

问题在于创建Filesource的方式。
它中有一个bug正在生成一个目录错误的文件。
因此,当您调用.exists时,它根本不会,因为您引用的是错误的文件路径
公共字符串子字符串(int start,int end)
自:API 1级
返回一个字符串,该字符串包含来自该字符串的字符的子序列。返回的字符串共享此字符串的后备数组。
参数
开始偏移第一个字符。
结束一个超过最后一个字符的偏移量。
退换商品
包含从头到尾字符的新字符串-1
您误用了substring。它从头到尾得到子字符串-1。你自己有-1,所以事实上你已经导致它从文件夹目录-2。
如果删除多余的-1并将下一个子字符串的开始时间减少1,那么它应该可以工作。

int end = from.toString().lastIndexOf("/") ;
String str1 = from.toString().substring(0, end);
String str2 = from.toString().substring(end+1, from.length());

编辑:
一种改进的方法是使用File方法
File source = new File(from); //creates file from full path name
String fileName = source.getName(); // get file name
File destination= new File(to, fileName ); // create destination file with name and dir.

关于java - android file.exists无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12516371/

10-13 05:27