2016-10-11 5 views
1

ある場所から別の場所に.zipファイルをコピーするコードがあります。それは期待どおりに動作します。 コピーしたファイルがフォルダ内に存在するかどうか確認したい。そうであれば、ファイルをコピーしてください。ある場所から別の場所にファイルをローカルにコピーし、ファイルが存在するかどうかを確認する

あなたのIDEのデバッグ機能を使用していることを確認し、私は私のロジックが正しいことを信じているが、私は間違っているつもりだところ、それはファイルが

が存在するかどう
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); 
     } 
    } 
    } 
} 
+0

なぜあなたのインクリメントとしてjを使用する2番目のループでは、何もありませんか? –

答えて

1
boolean check = dest.exists(); 
+0

'iName'が' dest'に存在するかどうかチェックしたいと思います。プラス 'File'には2つのパラメータが必要です。それはちょうど1つで動作しません。 – Maddy

+0

ファイルは単にパスを保存し、このパスにこのファイルのメソッドチェックが存在します。試して。 'boolean check = new File(" C:¥¥Somename¥¥Documents¥¥Development¥¥ZipFiles¥¥ "、iName).exists();'を使用することもできます。私は答えがクリーナーに変更されました –

2

をチェックしないので、私はわかりません論理的なエラーがどこにあるかを判断するのに役立ちます。

サイドノート:絶対に必要以上にコードを追加する必要はありません。これは、コードの実行が難しくなるため、これを単純化する必要があります。

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); 
     } 
    } 
    } 
} 
+0

チップをありがとう、私はあなたのコードを実行すると 'java.io.IOException:Destination 'C:\ Users \ somename \ Documents \ Development \ ZipFiles'ディレクトリを作成できません'エラー。なぜそれがそれをするのか分からない。それについての洞察は役に立ちます。 – Maddy

+0

スタックトレースがもっと役に立ちます。あなたは 'somename'という名前の新しいユーザーフォルダを作成できますか?まず、出力を簡素化して、アクセス権があることがわかっている既存のディレクトリに移動します。 – JynXXedRabbitFoot

+0

申し訳ありません私は私のコメントを更新するのを忘れました。私はそのことを考え出しました。はい、私はsomenameを必要な名前に変更するのを忘れていました。 – Maddy

関連する問題