java - 如何从目录和子目录中复制具有特定扩展名的所有文件?

标签 java java-io

我知道如何将文件从一个目录复制到另一个目录,我需要帮助的是复制扩展名为 .jpg 或 .doc 的文件。

例如。

D:/Pictures/Holidays 复制所有文件

扫描上述路径中的所有文件夹并将所有 jpg 传输到提供的目的地。

最佳答案

这行得通,但是文件“复制(文件文件,文件输出文件夹)”方法可以针对大文件进行增强:

package net.bpfurtado.copyfiles;

import java.io.File;
import java.io.FileFilter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

public class CopyFilesFromType
{
    public static void main(String[] args)
    {
        new CopyFilesFromType().copy("jpg", "C:\\Users\\BrunoFurtado\\Pictures", "c:/temp/photos");
    }

    private FileTypeOrFolderFilter filter = null;

    private void copy(final String fileType, String fromPath, String outputPath)
    {
        filter = new FileTypeOrFolderFilter(fileType);
        File currentFolder = new File(fromPath);
        File outputFolder = new File(outputPath);
        scanFolder(fileType, currentFolder, outputFolder);
    }

    private void scanFolder(final String fileType, File currentFolder, File outputFolder)
    {
        System.out.println("Scanning folder [" + currentFolder + "]...");
        File[] files = currentFolder.listFiles(filter);
        for (File file : files) {
            if (file.isDirectory()) {
                scanFolder(fileType, file, outputFolder);
            } else {
                copy(file, outputFolder);
            }
        }
    }

    private void copy(File file, File outputFolder)
    {
        try {
            System.out.println("\tCopying [" + file + "] to folder [" + outputFolder + "]...");
            InputStream input = new FileInputStream(file);
            OutputStream out = new FileOutputStream(new File(outputFolder + File.separator + file.getName()));
            byte data[] = new byte[input.available()];
            input.read(data);
            out.write(data);
            out.flush();
            out.close();
            input.close();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    private final class FileTypeOrFolderFilter implements FileFilter
    {
        private final String fileType;

        private FileTypeOrFolderFilter(String fileType)
        {
            this.fileType = fileType;
        }

        public boolean accept(File pathname)
        {
            return pathname.getName().endsWith("." + fileType) || pathname.isDirectory();
        }
    }
}

关于java - 如何从目录和子目录中复制具有特定扩展名的所有文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7796922/

相关文章:

java - Spring Boot 无法解析字符串中的占位符

java - 应该如何使用 LibGDX dispose() 方法?

java - 套接字:BufferedReader readLine() block

Java Scanner(File) 行为异常,但 Scanner(FIleInputStream) 始终处理同一个文件

linux - 无法使用Java代码在Linux运行时创建文件

Java大文件保存在数据库中-对象设计

java - 为什么这个java函数不指示文件路径无效

java - 如何使 JPanel 居中(包含 JBox,但不一定)?

Java:如何从查询字符串中删除参数

java - 如何同步到 Android 帧速率