0

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

我的 src 文件目录是这样的

C:\路径\到\临时

我的目标目录是这样的

C:\path\to\destination\1 & C:\path\to\destination\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()第二次失败期间,它第一次工作,但第二次失败。

4

1 回答 1

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会给你一些奇怪的东西。

于 2012-08-13T16:07:56.557 回答