在我的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,但具有此路径的文件存在。我做错什么了? 最佳答案
问题在于创建File
source
的方式。
它中有一个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/