如何在Java 8中将文件复制到另一个目录?

5
我希望将一个包中的文件复制到另一个包中。 我尝试使用Files.copy方法,但它替换了我的文件夹并复制了文件。
public static void main(String[] args) throws IOException {

    InputStream in = CopyFileToDirectoryTest.class.getClassLoader()
            .getResourceAsStream("com/stackoverflow/main/Movie.class");

    Path path = Paths.get("D://folder");

    long copy = Files.copy(in, path,StandardCopyOption.REPLACE_EXISTING);
    System.out.println(copy);

}

这不能起作用,因为它删除文件夹并创建与文件夹同名的文件。

在Java 8中有方法吗?或者我应该使用Apache Commons IO

1个回答

8

Files.copy 需要目标文件的名称。

Path targetFilePath = Paths.get("D:/folder/Movie.class");

这确实需要比传统的“如果目标是一个目录,将文件复制到其中”更多的工作。另一方面,这是一个非常有用的需求:InputStream不再具有名称。


谢谢,但是如何将类路径资源(com/stackoverflow/json/Movie.class)转换为Path对象? - Jay Smith
因为我需要将Movie.class从一个包复制到同一项目中的另一个包中。 - Jay Smith
2
@JaySmith:https://dev59.com/questions/6mUo5IYBdhLWcg3w3ycF - Louis Wasserman
一个 .class 文件的完整类名中包含了它所在的包路径,因此我们不能正常地进行移动操作。如果你需要重新打包来自一个 jar 包的类,应该采用更合适的方法。 - Joop Eggen
谢谢,链接有帮助,但是它抛出了新的异常java.nio.file.DirectoryNotEmptyException。这意味着com/stackoverflow/json不是空的。 - Jay Smith
我在stackoverflow上发布了一个关于这个问题的新问题:https://dev59.com/21cP5IYBdhLWcg3wtMH_ - Jay Smith

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接