1

画像ファイルの URL を含むテキスト ファイルがあります。

これらのファイルを他のディレクトリからコピーしたい。

このコードは機能しません

    File source =//
    File target = //
    File urls = //
     Scanner scanner = new Scanner(urls);
    for (File child :source.listFiles())
     {
         if (child.isDirectory()) 

            while (scanner.hasNextLine()) {

            String line = scanner.nextLine();

            for (File childOfchild:child.listFiles())
             {
                 if (childOfchild.getAbsolutePath().contains(line))

                               FileUtils.copyFileToDirectory(childOfchild,target);

             }

            }
    }

何が問題ですか?

最初のファイルには、コピーしたい画像の URL が含まれています

    \actor\0211_2233188435.jpg
    \actor\0405_52447453.jpg

ソースの場所には、たとえば704のサブディレクトリと250000のファイルが含まれています

    /media/B68E392F8E38E98F/Flickr1/Flickr/actor/0001_2124494179.jpg
4

3 に答える 3

0

再帰を使用してください。ネットで例を見つけることができます。これはそれらの1つです:

public void copyDirectory(File sourceLocation , File targetLocation) throws IOException {
    if (sourceLocation.isDirectory()) {
        if (!targetLocation.exists()) {
            targetLocation.mkdir();
        }

        String[] children = sourceLocation.list();
        for (int i=0; i<children.length; i++) {
            copyDirectory(new File(sourceLocation, children[i]),
                    new File(targetLocation, children[i]));
        }
    } else {

        InputStream in = new FileInputStream(sourceLocation);
        OutputStream out = new FileOutputStream(targetLocation);

        // Copy the bits from instream to outstream
        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        in.close();
        out.close();
    }
}
于 2013-04-07T10:34:22.920 に答える
0

以下のコードは、順次アプローチを使用して、sourceDir のファイル構造全体を destDir にコピーします。私はapache-commonslib に詳しくないので、もっとエレガントな解決策がある可能性があります。

public static String getNewPath(File file,File source,File dest) throws IOException {
    String filePath = file.getCanonicalPath().replaceAll(source.getCanonicalPath(), "");        
    return dest.getCanonicalPath()+filePath;
}

public static void main(String[] args) throws IOException {
    File sourceDir = new File("./f_src");
    File destDir = new File("./f_dest");
    Collection<File> fs = FileUtils.listFilesAndDirs(sourceDir, TrueFileFilter.TRUE, TrueFileFilter.TRUE);
    for (File f : fs) {
        if (f.exists() && f.canRead()) {
            if (f.isFile()) {
                FileUtils.copyFile(f, new File(getNewPath(f,sourceDir,destDir)));                    
            }
            else {
                FileUtils.copyDirectory(f, new File(getNewPath(f,sourceDir,destDir)));
            }
        }
    }
}

f_srcこのコードは、ルート プロジェクト ディレクトリ内にとという 2 つのディレクトリが存在することを前提としていますf_dest。これは のテスト ファイル構造でf_src、数字はディレクトリ、文字はファイルです。

f_src
   |\-1
   | |\-2
   | | | \-3
   | | |   \-a
   | |  \-b
   |  \-c
   |\-4 
   |  |\-5
   |  |   \-d
   |   \-e
   |\-6
   |\-7
   |  \-f
   \-g
于 2013-04-07T11:59:37.643 に答える
0

エラーは while 命令の位置です

File source =//
File target = //
File urls = //
 Scanner scanner = new Scanner(urls);
 while (scanner.hasNextLine()) {
 for (File child :source.listFiles())
 {
     if (child.isDirectory()) 



        String line = scanner.nextLine();

        for (File childOfchild:child.listFiles())
         {
             if (childOfchild.getAbsolutePath().contains(line))

                           FileUtils.copyFileToDirectory(childOfchild,target);

         }

        }
}
于 2013-04-07T19:44:51.113 に答える