尝试打开目录的eac子文件夹并将pdf文件复制到不同的公用文件夹

时间:2016-12-22 12:03:52

标签: java pdf

如何进入给定目录中的每个子文件夹并从那里获取pdf文件,如同收集所有子文件夹中的所有pdf并移动到公共文件夹?

我尝试过以下失败的代码。

import java.io.File;
import java.io.IOException;`enter code here`
import java.nio.file.Files;
import java.util.ArrayList;


public class PDFMover{

/** 
 * @param args
 * @return 
 * @throws IOException 
 */
public static void main(String[] args) throws IOException {

    File mainfolder = new File("C:\\Users\\myuser\\Desktop\\X\\Report");

    File[] fulllist = mainfolder.listFiles();

    ArrayList<String> listofpath = new ArrayList<String>(fulllist.length);


    for (File x : fulllist)    
    {
        if (x.isDirectory())

        {

            System.out.println("Directory:" +x.getName());
        }

        else

        {
            System.out.println("Notfound");
        }
    }

    String source = "C:\\Users\\myuser\\Desktop\\X\\Report";

    String destination ="C:\\Users\\myuser\\Desktop\\Destination";

    File f1 = new File(source);

    File f2 = new File(destination);

    for (File x : fulllist)

    {

        if(mainfolder.isDirectory())

        {

        Files.copy(f1.toPath(), f2.toPath());

        }


    }

 }
}

2 个答案:

答案 0 :(得分:0)

如果你使用nio.Files解决方案来查找每个子目录中的每个文件:

import java.nio.file.FileSystems;
import java.nio.file.Files;

public class FileWalker
{
    public static final String PATH = "C:\\Users\\myuser\\Desktop\\X\\Report";

    public static void main(final String[] args) throws Exception
    {
        Files.walk(FileSystems.getDefault()
                              .getPath((PATH)))
             .map(path -> path.getFileName())
             .filter(name -> name.toString()
                                 .toLowerCase()
                                 .endsWith("pdf"))
             .forEach(System.out::println);
    }
}

而不是System.out.println,你必须复制文件。

答案 1 :(得分:0)

您可以使用递归函数,也可以使用显式堆栈来执行此操作。您只需检查每个文件,看它们是否符合您的选择标准。如果没有,如果它是一个目录,你把它放在堆栈中继续前进。

这是使用这种方法的一些工作代码。它让你找到具有特定扩展名的文件,直到特定的递归深度。 getRecurseFiles()返回规范路径字符串列表。

import java.util.*;
import java.io.*;

class Tracker {
    File[] list;
    int depth;

    public Tracker (File[] l, int d) {
        this.list = l;
        this.depth = d;
    }
}

public class RecTraverse {
    public static int MAX_DEPTH = 10;

    List<String> getRecurseFiles (String dir) throws IOException {
        List<String> requiredFiles = new ArrayList<>();
        Stack<Tracker> rstack = new Stack<>();

        File[] list = new File(dir).listFiles();
        rstack.push(new Tracker(list, 1));

        while (!rstack.empty()) {
            Tracker tmp = rstack.pop();

            for (int i=0; i<tmp.list.length; i++) {
                File thisEntry = tmp.list[i];
                String fileName = tmp.list[i].getCanonicalPath();
                if (thisEntry.isFile()) {
                    int j = fileName.lastIndexOf('.');
                    if (j > 0) {
                        String extension = fileName.substring(j+1).toLowerCase();
                        if (extension.equals("pdf"))
                            requiredFiles.add(tmp.list[i].getCanonicalPath());
                    }
                } else {
                    System.out.println(thisEntry.getCanonicalPath());
                    File[] thisEntryList = thisEntry.listFiles();
                    if (thisEntryList != null && tmp.depth+1 <= MAX_DEPTH) {
                        rstack.push(new Tracker(thisEntryList, tmp.depth+1));
                    }
                }
            }
        }
        return requiredFiles;
    }

    public static void main (String[] arg) {
        try {
            List<String> l = new RecTraverse().getRecurseFiles(".");
            for (String s : l)
                System.out.println(s);
        } catch (IOException e) {
        }
    }
}