gpt4 book ai didi

java-8 - 尝试通过 Files.walk 将文件收集到数组中时出现 ArrayStoreException

转载 作者:行者123 更新时间:2023-12-02 06:41:02 30 4
gpt4 key购买 nike

我正在尝试了解 Java 8 Stream 功能。

我想捕获特定目录路径的所有子目录中的数组(也可以是列表)中的所有文件。

我的代码抛出 java.lang.ArrayStoreException 错误

  File[] files = Files.walk(Paths.get(path))
.filter(Files::isRegularFile)
.toArray(File[]::new);

我尝试的另一件事是将文件名添加到现有的 ArrayList 中:

  ArrayList<String> existingNames = new ArrayList<String>();
Files.walk(Paths.get(path))
.filter(Files::isRegularFile)
.forEach(p -> existingNames.add(p.getFileName()));

这也会引发 java.lang.ArrayStoreException 错误。

我尝试过的其他方法也得到了相同的结果:

  File[] files = Files.walk(Paths.get(path))
.filter(Files::isRegularFile)
.toArray(File[]::new);

有人能指出我正确的方向吗?

完整的堆栈跟踪是:

Exception in thread "main" java.lang.ArrayStoreException at java.lang.System.arraycopy(Native Method) at java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:198) at java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Nodes.java:1290) at java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215) at java.util.stream.Nodes$SpinedNodeBuilder.asArray(Nodes.java:1296) at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:439) at nachbearbeitung.CheckExistingMAIDs.main(CheckExistingMAIDs.java:41)

提前致谢!

最佳答案

ArrayStoreException不是特定于 Java 流,它是非常古老的 Java 异常,这意味着您想要在数组中存储不兼容类型的元素。在您的情况下,您想要创建一个 File 的数组对象。但事实上你正在尝试存储 Path那里的对象,如 Files.walk产生 Stream<Path> ,不是Stream<File> 。转换PathFile您可以使用Path.toFile方法在 map 中调用它步骤:

File[] files = Files.walk(Paths.get("."))
.filter(Files::isRegularFile)
.map(Path::toFile)
.toArray(File[]::new);

关于java-8 - 尝试通过 Files.walk 将文件收集到数组中时出现 ArrayStoreException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46502937/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com