使用java.nio.file.Path';获取目录中的元素;s
我目前正在掌握Java中的文件管理。据我所知,java.nio.file.Path是这样做的首选方式 假设我想将oldDir的内容复制到当前为空的newDir。每次我复制一个文件时,我都需要这行代码来获取新文件的路径:使用java.nio.file.Path';获取目录中的元素;s,java,file,io,java.nio.file,Java,File,Io,Java.nio.file,我目前正在掌握Java中的文件管理。据我所知,java.nio.file.Path是这样做的首选方式 假设我想将oldDir的内容复制到当前为空的newDir。每次我复制一个文件时,我都需要这行代码来获取新文件的路径: Path newDir=FileSystems.getDefault().getPath(“新”); Path oldDir=FileSystems.getDefault().getPath(“old”); 用于(路径oldFile:oldDir){ Path newFile=F
Path newDir=FileSystems.getDefault().getPath(“新”);
Path oldDir=FileSystems.getDefault().getPath(“old”);
用于(路径oldFile:oldDir){
Path newFile=FileSystems.getDefault().getPath(“new”,oldFile.getFileName().toString());//为什么这么复杂?:(
文件。复制(旧文件、新文件);
}
是否有类似于
newDir.getChild(oldFile.getFileName())
的方法来做我想做的事情,还是真的没有更简单的方法来做呢?为了简化代码,您可以做以下几件事:
路径
实例。这两种方法都委托给默认的文件系统
。前者是在Java 11中添加的,现在是首选方法oldDir
,这是因为Path
实现了Iterable
。但是,这会迭代路径的名称,而不是路径的子项。换句话说,这:
Path Path=Path.of(“foo”、“bar”、“file.txt”);
用于(路径名称:路径){
System.out.println(名称);
}
将输出:
foo
酒吧
file.txt
如果您想迭代目录的子目录,您需要使用类似于或的东西(后者有两个重载)。这两种方法都只返回目录的直接子目录。还有其他方法可用于递归迭代目录及其子目录;请浏览文件
文档以查看提供的内容
因此,您的代码应该如下所示:
Path oldDir=Path.of(…);
Path newDir=路径的(…);
try(DirectoryStream dirStream=Files.newDirectoryStream(oldDir)){
对于(路径oldFile:dirStream){
Path newFile=newDir.resolve(oldFile.getFileName());
文件。复制(旧文件、新文件);
}
}
为了简化代码,您可以做以下几件事:
路径
实例。这两种方法都委托给默认的文件系统
。前者是在Java 11中添加的,现在是首选方法oldDir
,这是因为Path
实现了Iterable
。但是,这会迭代路径的名称,而不是路径的子项。换句话说,这:
Path Path=Path.of(“foo”、“bar”、“file.txt”);
用于(路径名称:路径){
System.out.println(名称);
}
将输出:
foo
酒吧
file.txt
如果您想迭代目录的子目录,您需要使用类似于或的东西(后者有两个重载)。这两种方法都只返回目录的直接子目录。还有其他方法可用于递归迭代目录及其子目录;请浏览文件
文档以查看提供的内容
因此,您的代码应该如下所示:
Path oldDir=Path.of(…);
Path newDir=路径的(…);
try(DirectoryStream dirStream=Files.newDirectoryStream(oldDir)){
对于(路径oldFile:dirStream){
Path newFile=newDir.resolve(oldFile.getFileName());
文件。复制(旧文件、新文件);
}
}
newDir.resolve(oldFile.getFileName())
newDir.resolve(oldFile.getFileName())