更新:根据文件扩展名将文件从一个文件夹移动到另一个文件夹

时间:2018-12-01 17:20:27

标签: java

情况:

我正在做一个自动化,我必须从一组文件中仅下载CSV文件。现在我只想将CSV文件从一个文件夹移动到另一个文件夹。

问题:

能否请您提供代码,以便在文件移动后立即从源文件夹中删除文件?

到目前为止,这是我的代码:

public class MyFilteredFileList {

    public static void main(String a[])

    {
        try {

        File source = new File("C:\\Users\\sh370472\\Downloads");
        File dest = new File("E:\\Query\\");

            FileUtils.copyDirectory(source, dest, new FileFilter() {

                @Override
                public boolean accept(File pathname) 
                {
                    boolean source=pathname.getName().toLowerCase().endsWith(".csv");
                    if (source)
                        return true;
                         return false;
                   }

            });
        } catch (IOException e) {
          e.printStackTrace();
        }
    }
}

编辑:但是我仍然面临一个问题。它会立即下载所有文件,然后删除。但是我的要求是这样的-它应该下载第一个文件->将下载的文件移到另一个文件夹中->从下载文件夹中删除第一个下载的文件->下载第二个文件夹...然后重复该过程

3 个答案:

答案 0 :(得分:0)

您可以简单地以这种方式移动文件。

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;

public class MyFilteredFileList {

    public static void main(String a[]){
        try {
            Files.move (Paths.get("C:\\Users\\sh370472\\Downloads\\file.txt"),
            Paths.get("E:\\Query\\file.txt"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 1 :(得分:0)

只需添加pathname.deleteOnExit();接受方法

@Override
 public boolean accept(File pathname) {
       boolean source = pathname.getName().toLowerCase().endsWith(".csv");

       if (source) {
           pathname.deleteOnExit();
           return true;
       }
   return false;
 }

整个代码:

import org.apache.commons.io.FileUtils;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;

/**
 * Created by Lenovo on 02/12/2018.
 */
public class FileMove {
    public static void main(String a[])

    {
        try {

            File source = new File("C:\\Users\\sh370472\\Downloads");
            File dest = new File("E:\\Query\\");

            FileUtils.copyDirectory(source, dest, new FileFilter() {

                @Override
                public boolean accept(File pathname) {
                    boolean source = pathname.getName().toLowerCase().endsWith(".csv");

                    if (source) {
                        pathname.deleteOnExit();
                        return true;
                    }
                    return false;
                }

            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

答案 2 :(得分:0)

复制此类并运行:)如果不起作用,请尝试设置正确的源路径和目标路径。

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;

public class MoveFile {

    private boolean moveFile(String source, String destination) throws IOException {
        Path srcPath = Paths.get(source);
        Path destPath = Paths.get(destination);
        System.out.println("Moving processed file to archive");
        Files.move(srcPath, destPath, StandardCopyOption.REPLACE_EXISTING);
        return true;
    }

    private File[] getTheFilesWithExtension(String filePath, String ext) {

        File fileDir = new File(filePath);
        File[] files = fileDir.listFiles((dir, name) -> name.toLowerCase().endsWith(ext));
        return files;
    }

    public static void main(String... args){
        {
            MoveFile moveFile = new MoveFile();
            String sourcePath = "C:\\\\Users\\\\sh370472\\\\Downloads";
            String destPath = "E:\\Query\\";
            String extension = ".csv";
            try {
                File[] files = moveFile.getTheFilesWithExtension(sourcePath, extension);
                for (File file : files){
                    moveFile.moveFile(file.getPath(),destPath+file.getName());
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

注意:对于Java 8及更高版本,对于较低的Java版本,您可以使用以下代码在getTheFilesWithExtension中更新lambda表达式

private File[] getTheFilesWithExtension(String filePath, String ext) {

        File fileDir = new File(filePath);
        File[] files = fileDir.listFiles(
                new FilenameFilter() {
                    @Override
                    public boolean accept(File dir, String name) {
                        return name.toLowerCase().endsWith(ext);
                    }
                }
        );
        return files;
    }