定位问题
可以看到是以下位置源码报错
public static void copyFile(File srcFile, File destFile, boolean preserveFileDate) throws IOException {
checkFileRequirements(srcFile, destFile);
if (srcFile.isDirectory()) {
throw new IOException("Source '" + srcFile + "' exists but is a directory");
} else if (srcFile.getCanonicalPath().equals(destFile.getCanonicalPath())) {
throw new IOException("Source '" + srcFile + "' and destination '" + destFile + "' are the same");
} else {
File parentFile = destFile.getParentFile();
if (parentFile != null && !parentFile.mkdirs() && !parentFile.isDirectory()) {
throw new IOException("Destination '" + parentFile + "' directory cannot be created");
} else if (destFile.exists() && !destFile.canWrite()) {
throw new IOException("Destination '" + destFile + "' exists but is read-only");
} else {
doCopyFile(srcFile, destFile, preserveFileDate);
}
}
}
报错片段为
if (parentFile != null && !parentFile.mkdirs() && !parentFile.isDirectory()) {
throw new IOException("Destination '" + parentFile + "' directory cannot be created");
可以看出是
parentFile.isDirectory()
这一句有问题,但是路径是确实存在的
原因
路径直接复制到资源管理器访问的时候是会每一级自动去空格的所以可以找到路径,然而parentFile.isDirectory()得到的路径如果包含空格在最后是不能被识别的,因此判断这个路径为false,因为根本不存在
解决方法
在代码中找到路径处理的语句,对路径名各个部分都进行trim()操作防止拼接后的路径名存在空格