Java 如何将特定文件从一个目录复制到另一个目录

How to copy specific files from one directory to another in Java

我有一个目录,其中有一堆文件需要复制到另一个目录,使用 Java 我只想复制以“.txt”扩展名结尾的文件。我很熟悉为一个文件做这件事,如下所示,请你帮我做一个循环,看看源目录中的哪些文件与“txt”扩展名匹配,然后将它们全部复制到一个新目录。

File sourceFileLocation = new File(
                "C:\Users\mike\data\assets.txt");

        File newFileLocation = new File(
                "C:\Users\mike\destination\newFile.txt");
        try {
            Files.copy(sourceFileLocation.toPath(), newFileLocation.toPath());

        } catch (Exception e) {

            e.printStackTrace();
        }

您可以使用Files#list(Path)获取流,并使用流操作过滤和收集仅包含扩展名txt的文件名。例如:

List<Path> paths = Files.list(Paths.get("C:/Users/hecto/Documents")).filter(path -> path.toString().endsWith(".txt")).collect(Collectors.toList());
for (Path path : paths) {
    System.out.println(path.toString());
}

对我来说,打印出来的是:

C:\Users\hecto\Documents\file1.txt
C:\Users\hecto\Documents\file2.txt
C:\Users\hecto\Documents\file3.txt

即使我在该目录中还有其他文件和文件夹

使用它,我想出了这个解决方案,将那些过滤后的文件从它们的当前位置复制到新的目的地并保留原始名称(使用 Java 8 或更高版本):

try (Stream<Path> stream = Files.list(Paths.get("C:/Users/hecto/Documents"))) {
    List<Path> paths = stream.filter(path -> path.toString().endsWith(".txt")).collect(Collectors.toList());
    for (Path source : paths) {
        Path destination = Paths.get("C:/Users/hecto/Desktop/target" + File.separator + source.getFileName());
        Files.copy(source, destination, StandardCopyOption.REPLACE_EXISTING);
    }           
}

(答案更新为使用 try-with-resources 关闭流)