Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列出文件名,但不显示父路径_Java - Fatal编程技术网

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)));