Files.copy(Path,Path) 是否创建目录?

2022-09-03 04:42:47

我有一堆文本文件(比如ss1.txt ss2.txt s3.txt等)在我的Java程序()的目录下?
我想将我的 txt 文件移动到尚未创建的新目录。我的所有文件都有一个字符串地址,我认为我可以将它们转换为路径C:/Users/java/dir1

Path path = Paths.get(textPath);

将创建一个字符串(),使用上述方法将其转换为路径,然后使用C:/Users/java/dir2

Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2)

导致被复制到新目录?ss1.text


答案 1

使用 Files.createDirectories() 这很容易

Path source = Path.of("c:/dir/dir-x/file.ext");
Path target = Path.of("c:/target-dir/dir-y/target-file.ext");
Files.createDirectories(target.getParent());
Files.copy(path, target, StandardCopyOption.REPLACE_EXISTING);    

如果目录已经存在,请不要担心,在这种情况下,它将什么都不做并继续前进...


答案 2

方法不会创建目录,它将在包含ss1.txt数据的java目录中创建文件dir2。Files.copy(C:/Users/java/dir1/ss1.txt,C:/Users/java/dir2)

您可以使用以下代码进行尝试:

File sourceFile = new File( "C:/Users/java/dir1/ss1.txt" );
Path sourcePath = sourceFile.toPath();

File destFile = new File( "C:/Users/java/dir2" );
Path destPath = destFile.toPath();

Files.copy( sourcePath, destPath );

请记住使用java.nio.file.Files和java.nio.file.Path。

如果你想使用类形式java.nio将文件从一个目录复制到另一个目录,你应该使用Files.walkFileTree(...)方法。你可以在这里看到Java的解决方案:使用nio Files.copy来移动目录

或者你可以简单地使用来自apache的'FileUtils类 http://commons.apache.org/proper/commons-io/ 库,从版本1.2开始可用。

File source = new File("C:/Users/java/dir1");
File dest = new File("C:/Users/java/dir2");
try {
    FileUtils.copyDirectory(source, dest);
} catch (IOException e) {
    e.printStackTrace();
}

推荐