我正在尝试将文件上传到两个不同的目录。但不知何故,它将文件复制到一个目录,但无法复制到第二个目录中。
我的文件的src目录是这样的
C:\路径\到\ TEMP
我的目的地目录就像这样
C:\ path \ to \ destination \ 1& C:\路径\到\目的地\ 2
目录1和2正在即时创建。
这就是我在我的代码中使用的
public final static boolean move(String src, String dest, boolean createDestDir, boolean overwrite) {
try{
if(src == null || src.length() == 0 || dest == null || dest.length() == 0){
return false;
}
File srcFile = new File(src);
if(srcFile.isFile() == false){
return false;
}
String destPath = path(dest);
String destFileName;
if (destPath.equals(dest)) {
destFileName = srcFile.getName();
} else {
destFileName = name(dest);
}
File destDir = new File(destPath);
if (destDir.exists() == false) {
if (createDestDir == false) return false;
if (destDir.mkdirs() == false) {
return false;
}
}
File destFile = new File(destPath + destFileName);
if (destFile.exists()) {
if (overwrite == false) return false;
if (destFile.delete() == false) {
return false;
}
}
return srcFile.renameTo(destFile);
}
}
在我的循环srcFile.isFile()
第二次失败时,它第一次运行,但第二次失败。
答案 0 :(得分:1)
mkdirs
方法在文件路径中创建任何缺少的父目录。例如。如果目标位置是C:\ some \ path \ to \ file \,那么如果你调用mkdirs
,它将检查C:\ some是否存在,然后是C:\ some \ path,依此类推。如果路径不存在,它将创建该文件夹并继续。完成后,如果必须创建任何文件夹,仅将返回true。如果目录结构存在,则返回false。
在你的代码中,你有这个:
File destDir = new File(destPath);
if (destDir.exists() == false) {
if (createDestDir == false) return false;
if (destDir.mkdirs() == false) {
return false;
}
}
File destFile = new File(destPath + destFileName);
if (destFile.exists()) {
if (overwrite == false) return false;
if (destFile.delete() == false) {
return false;
}
}
我不确定你为什么要经历这种复杂的创建目录结构的方式。您应该只调用createDestDir
方法,而不是整个false
变量(我怀疑它应该是mkdirs()
)。如果目录结构已经存在,那么没有硬调用该方法。
然后在下一段代码中,检查文件系统上是否已存在该文件。如果它确实存在,并且您没有将overwrite
布尔值设置为true
,那么您尝试删除该文件。但在任何时候都不会致电createNewFile()
。您永远不会在文件系统上实际创建文件。
尝试用以下代码替换上面的代码:
new File(destPath).mkdirs();
File destFile = new File(destPath + destFileName);
if (destFile.exists())
if (!overwrite) {
return false;
} else {
destFile.delete();
}
}
destFile.createNewFile();
如果需要,这将创建目标目录,检查文件是否存在(如果允许和必要则删除它),然后在该位置创建文件。
此外,您应该检查以确保destPath
以文件分隔符结尾 - 例如。 Linux / Unix中的“/”或Windows中的“\” - 否则destPath + destFileName
会给你一些不可思议的东西。