Java 列出文件名,但不显示父路径
我列出了给定目录中的所有文件名(递归)。这还包括在子目录中显示文件名Java 列出文件名,但不显示父路径,java,Java,我列出了给定目录中的所有文件名(递归)。这还包括在子目录中显示文件名 File file = new File(FILE_PATH); // Recursively search for all the resource files. Collection files = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE); for (Iterator iterat
File file = new File(FILE_PATH);
// Recursively search for all the resource files.
Collection files = FileUtils.listFiles(file, TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
for (Iterator iterator = files.iterator(); iterator.hasNext();)
{
File fileIter = (File) iterator.next();
System.out.println("File = " + fileIter.getPath());
}
其中文件是父目录(“C:\Users\sd\Desktop\sdsd)
现在,上面的代码运行文件并列出该目录和子目录中的所有文件,如
C:\Users\sd\Desktop\sdsd\TagCategory\HealthOutlets\U queries\neurous.txt
但我只想显示(父路径中的路径)
TagCategory\HealthOutlets\u queries\Neurological.txt
我该怎么做。只需添加子字符串:
fileIter.getPath().substring(file.length())
使用Path.relativize()
在此路径和给定路径之间构造相对路径
相对化是分辨率的倒数。这种方法试图
构造一个相对路径,当根据该路径进行解析时,会产生
与给定路径定位相同文件的路径。例如,在
如果此路径为“/a/b”,而给定路径为“/a/b/c/d”,则
由此产生的相对路径将是“c/d”
因此,您只需通过调用parentPath.relatiize(filePath)
从父路径创建一个相对路径,并对每个文件执行此操作:
Path parentPath = Paths.get(FILE_PATH);
for (Iterator<File> iterator = files.iterator(); iterator.hasNext();){
Path filePath = iterator.next().toPath();
Path relativePath = parentPath.relativize(filePath);
System.out.println("File = " + relativePath );
}
您可以使用substring命令按以下方式获取该值 如果父目录将保持相同的长度,那么它只是
fileIter.getPath().substring(25);
这将获得字符串中第25个字符之后的所有字符,如果您想省略.txt,例如,您可以指定子字符串的结束位置,下面将从总长度中减去三个字符
fileIter.getPath().substring(25, fileIter.getPath().length() - 3);
有关子字符串方法的更多详细信息,请参见使用旧的第三方库使代码复杂化有什么意义?只需使用普通Java:它与多行方法的作用完全相同:
Path root = Paths.get(FILE_PATH);
Files.walk(root).forEach(path -> System.out.println("File = " + root.relativize(path)));
您选择使用原始(非泛型)类有什么原因吗?我的意思是2017年,而不是2001年。我不是想让它们保持非泛型。我只是匆忙复制了粘贴。我已经在代码中修复了它。这比使用
substring()
要干净得多。您使用path.get(file.toURI())有什么原因吗
而不是file.toPath()
?无法抗拒:files.stream().map(f->f.toPath()).map(parentPath::relativeize).forEach(f->System.out.println(“file=“+f”);
@dodyCodeException没有很好的理由。调用toURI()
可能是个坏习惯。谢谢你的反馈。我编辑过了。这样比较干净。
Path root = Paths.get(FILE_PATH);
Files.walk(root).forEach(path -> System.out.println("File = " + root.relativize(path)));