将文件从临时目录复制到两个不同的目录失败

时间:2012-08-13 15:33:04

标签: java file-upload

我正在尝试将文件上传到两个不同的目录。但不知何故,它将文件复制到一个目录,但无法复制到第二个目录中。

我的文件的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()第二次失败时,它第一次运行,但第二次失败。

1 个答案:

答案 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会给你一些不可思议的东西。