我有根目录和文件,这些文件嵌套在根目录中(它们可以在子目录中)。我想创建这些文件的相对路径列表。我写了代码,但是替换不起作用。
public class FileManager {
private Path rootPath;
private List<Path> fileList = new ArrayList<Path>();
public FileManager(Path rootPath) throws IOException{
this.rootPath = rootPath;
collectFileList(rootPath);
}
private void collectFileList(Path path) throws IOException{
if (Files.isRegularFile(path)){
if (!fileList.contains(path.getParent())){
String result_path = path.toAbsolutePath().toString().replaceAll(rootPath.toString(),"");
fileList.add(Paths.get(result_path));
}
}else if (Files.isDirectory(path)){
for (File file:path.toFile().listFiles()
) {
collectFileList(Paths.get(file.getAbsolutePath()));
}
}
}
例如:我的根目录为“ E:\ test”,文件为“ E:\ test \ test2 \ 1.txt”。我想替换路径文件的根目录,并返回“ test2 \ 1.txt”。但我总是收到“ E:\ test \ test2 \ 1.txt”。我的替换有什么问题?
放松一下!
相对化是分辨率的逆向。此方法尝试构造一个相对路径,该相对路径在针对该路径进行解析时会产生一个与给定路径位于同一文件的路径。例如,在UNIX上,如果此路径为“ / a / b”并且给定路径为“ / a / b / c / d”,则所得的相对路径将为“ c / d”。如果此路径和给定路径没有根组件,则可以构造相对路径。如果只有一个路径具有根组件,则无法构造相对路径。如果两个路径都具有根组件,那么是否可以构造相对路径取决于实现。如果此路径与给定路径相等,则返回空路径。
对于任何两个归一化的路径p和q,其中q没有根分量,
p.relativize(p .resolve(q))。equals(q)如果支持符号链接,则针对该路径解析后得到的路径是否生成可用于与实现相同的文件定位的路径依赖。例如,如果此路径为“ / a / b”,给定路径为“ / a / x”,则所得的相对路径可能为“ ../x”。如果“ b”是符号链接,则如果“ a / b /../ x”将定位与“ / a / x”相同的文件,则依赖于实现。
例子
Path dir = Path.of("/var/lib");
Path file = Path.of("/var/lib/someapp/1.txt");
Path relative = dir.relativize(file);
System.out.print(relative);
输出
someapp/1.txt
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句