如何读取文件夹,计算文件并复制到新文件夹

时间:2012-10-24 09:51:27

标签: java copy location directory

跟进上一个问题 - Java: How to read directory folder, count and display no of files and copy to another folder?,我想读取一个文件夹,计算文件夹中的文件(任何文件类型),显示文件数,然后将其复制到新文件夹。但是,我得到以下例外:

  

线程中的异常" main" java.io.FileNotFoundException:C:\ project \ curFolder(访问被拒绝)   C:\ project \ newFolder已经存在:继续进程!       at java.io.FileInputStream.open(Native Method)       在java.io.FileInputStream。(FileInputStream.java:120)       at filetransfer.FileTransfer.copyFiles(FileTransfer.java:54)       在filetransfer.FileTransfer.checkDir(FileTransfer.java:44)       在filetransfer.FileTransfer.readDirectory(FileTransfer.java:29)       在filetransfer.FileTransfer.main(FileTransfer.java:12)   Java结果:1   建立成功(总时间:0秒)

请记住我是学生。这是我到目前为止所做的:

public class FileTransfer {

    public static void main(String[] args) throws FileNotFoundException, IOException {
         readDirectory();
    }

public static void readDirectory() throws FileNotFoundException, IOException {
        //create new file object with location of folder
        File curFolder = new File("C:/project/curFolder/");
        int totalFiles = 0;
        //for loop to count the files in the directory using listfiles method
        for (File file : curFolder.listFiles()) {
            //determine if the file object is a file
            if (file.isFile()) {
                //count files ++
                totalFiles++;
            }
        }
        //display number of files in directory
        System.out.println("Number of files: " + totalFiles);
        checkDir();
    }

    public static void checkDir() throws FileNotFoundException, IOException {
        //check if destination directory exist, if not create directory
        //create new file object with copy folder destination
        File newFolder = new File("C:/project/newFolder/");
        //Check if folder exist: True: Println with message(true and continuing)
        if (newFolder.exists()) {
            System.out.println(newFolder + " already exist: Continuing with process!");
        } else {
            //False: Create Dir
            newFolder.mkdir();
            System.out.println(newFolder + " created!");
        }
        copyFiles();
    }

    public static void copyFiles() throws FileNotFoundException, IOException {
        //copy files from specified directory to new directory
        File fromCur = new File("C:/project/curFolder/");
        File toNew = new File("C:/project/newFolder/");
        FileInputStream from = null;
        FileOutputStream to = null;
        try {
            from = new FileInputStream(fromCur);
            to = new FileOutputStream(toNew);
            byte[] buffer = new byte[4096];
            int bytesRead;

            while ((bytesRead = from.read(buffer)) != -1) {
                to.write(buffer, 0, bytesRead);
            }
        } finally {
            if (from != null) {
                try {
                    from.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
            }
            if (to != null) {
                try {
                    to.close();
                } catch (IOException e) {
                    System.out.println(e.getMessage());
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您要做的是复制文件夹本身,而不是文件夹中的文件。尝试更改copyFiles方法的这一部分:

    File fromCur = new File("C:/project/curFolder/");
        File toNew = new File("C:/project/newFolder/");
        FileInputStream from = null;
        FileOutputStream to = null;

    try {

    to = new FileOutputStream(toNew);
    byte[] buffer = new byte[4096];
    int bytesRead;

    for (File fileTemp : fromCur.listFiles()) {
     if (fileTemp.isFile()) {
        from = new FileInputStream(fileTemp);
         while ((bytesRead = from.read(buffer)) != -1) {
          to.write(buffer, 0, bytesRead);
         }
     }
    }

在循环播放时,这将引用您的文件文件夹中,而不是文件夹本身。

答案 1 :(得分:0)

错误与以下行有关:

from = new FileInputStream(fromCur);

因为C:\project\curFolder是文件夹而不是文件。根据{{​​3}}文档,您看到的例外是正确的。

  

抛出:    FileNotFoundException - 如果文件不存在,是目录而不是常规文件,或者由于某些其他原因无法打开进行阅读。

(我在上面引用的重点)

我相信你可能想要检查输入文件FileInputStream然后再检查is a directory并逐个复制它们。