java - 将文件从一个位置本地复制到另一个位置并检查文件是否存在

标签 java

我有将 .zip 文件从一个位置复制到另一个位置的代码。它按预期工作。 我想检查文件夹中是否存在复制的文件。如果是这样,它应该继续,否则复制文件。

我相信我的逻辑是正确的,但我不确定我哪里出错了,因为它不检查文件是否存在

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class ZipFileMover
{

  public void findFiles(File root, int depth)
      throws IOException
  {
    File[] listOfFiles = root.listFiles();
    for (int i = 0; i < listOfFiles.length; i++)
    {
      String iName = listOfFiles[i].getName();
      if (listOfFiles[i].isFile())
      {
        if (iName.endsWith(".zip"))
        {
          for (int j = 0; j < depth; j++)
          {}
          System.out.println("Files: " + iName);
          File dest = new File(
              "C:\\Users\\somename\\Documents\\Development\\ZipFiles\\"
                  + iName);

          String path = "C:\\Users\\somename\\Documents\\Development\\ZipFiles\\"
              + iName;

          // C:\Users\somename\Documents\Development\

          // System.out.println("ROOT + iNAME : " + (root + "\\" + iName));
          // //C:\Users\somename\Documents\Development\filename.zip

          boolean check = new File(dest, iName).exists();
          System.out.println(check);

          if ((root + "\\" + iName).equals(path))
          {
            continue;
          }
          else
          {
            if (check == true)
            {
              System.out.println(
                  "Skipped file " + iName + " it already exsits in folder.");
              continue;

            }
            else
            {
              System.out.println();
              System.out.println("Copying file " + iName);
              System.out.println();
              FileUtils.copyFile(new File(root + "\\" + iName), dest);
            }

          }
        }
      }
      else if (listOfFiles[i].isDirectory())
      {
        for (int j = 0; j < depth; j++)
          findFiles(listOfFiles[i], depth + 1);
      }
    }
  }
}

最佳答案

确保使用 IDE 的调试功能,它将帮助您确定逻辑错误所在。

旁注:不要添加比你绝对需要的更多的 if 和 else,这会使代码难以理解,这应该会简化它。

import java.io.File;
import java.io.IOException;

import org.apache.commons.io.FileUtils;

public class ZipFileMover
{
  static String outputPath = "C:\\Users\\somename\\Documents\\Development\\ZipFiles\\";

  public void findFiles(File root, int depth)
      throws IOException
  {
    File[] listOfFiles = root.listFiles();
    for (int i = 0; i < listOfFiles.length; i++)
    {
      String iName = listOfFiles[i].getName();
      if (listOfFiles[i].isFile() && iName.endsWith(".zip"))
      {
        System.out.println("Files: " + iName);
        File dest = new File(outputPath + iName);
        if (dest.exists())
        {
          System.out.println(
              "Skipped file " + iName + " it already exsits in folder.");
          continue;
        }
        else if ((root + "\\" + iName).equals(dest))
        {
          continue;
        }
        else
        {
          System.out.println();
          System.out.println("Copying file " + iName);
          System.out.println();
          FileUtils.copyFile(listOfFiles[i], dest);
        }
      }
      else if (listOfFiles[i].isDirectory())
      {
        for (int j = 0; j < depth; j++)
          findFiles(listOfFiles[i], depth + 1);
      }
    }
  }
}

关于java - 将文件从一个位置本地复制到另一个位置并检查文件是否存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39981858/

相关文章:

java - 确定一个类对象是否是一个抽象类的实例

java - 如何找到内存泄漏的根源?

Java:使用 int 数组调用 Object vararg 方法

java - 如何取消 Google App Engine 插件的身份验证?

java - 如何在 NatTable 单元格中插入两个文本,每个文本具有不同的字体?

java - 用于捕获括号和/或引号之间的文本的正则表达式

java - OAuth 使用 Scribe 与 Vimeo 集成

java - 使用 Java Streams 获取不包含在同一列表中的结果列表

java - 如何使用 apache POI 在 Excel 中使特定列只读

Java 反射和 scala 类