Java 8 尝试通过files.walk将文件收集到阵列时发生ArrayStoreException

Java 8 尝试通过files.walk将文件收集到阵列时发生ArrayStoreException,java-8,java-stream,Java 8,Java Stream,我试图理解Java8流特性 我希望捕获特定目录路径的所有子目录中数组(可以是列表)中的所有文件 我的代码抛出java.lang.ArrayStoreException错误 我尝试的另一件事是将文件名添加到现有的ArrayList中: 谁能给我指出正确的方向吗 完整堆栈跟踪是: 线程“main”java.lang.ArrayStoreException中的异常位于 java.lang.System.arraycopy(本机方法)位于 位于的java.util.stream.SpinedBuffer

我试图理解Java8流特性

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

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

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

谁能给我指出正确的方向吗

完整堆栈跟踪是:

线程“main”java.lang.ArrayStoreException中的异常位于 java.lang.System.arraycopy(本机方法)位于 位于的java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:198) 位于的java.util.stream.Nodes$SpinedNodeBuilder.copyInto(Nodes.java:1290) java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215)位于 java.util.stream.Nodes$SpinedNodeBuilder.asArray(Nodes.java:1296)位于 java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:439) 在 nachbearbeitung.CheckExistingMAIDs.main(CheckExistingMAIDs.java:41)


提前谢谢

仅列出文件名:

List<Path> pathList = Files.walk(Paths.get(path))
                           .filter(Files::isRegularFile)
                           .collect(Collectors.toList());

pathList.forEach(p -> System.out.println(p.getFileName()));
List pathList=Files.walk(path.get(path))
.filter(文件::isRegularFile)
.collect(Collectors.toList());
forEach(p->System.out.println(p.getFileName());

无法在流中存储方法的局部变量:
.forEach(p->existingNames.add(p.getFileName())

一个
ArrayStoreException
不是特定于Java流的,它是非常古老的Java异常,这意味着您希望在数组中存储一个不兼容类型的元素。在本例中,您希望创建
文件
对象的数组。但实际上,您正试图将
路径
对象存储在那里,作为
文件。walk
生成一个
,而不是
。要将
路径
转换为
文件
,可以使用
Path.toFile
方法在
map
步骤中调用它:

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

你能分享完整的stacktrace吗?我的错!谢谢你的提示。这是一个java.lang.ArrayStoreException错误。这可能是的重复。不幸的是,我以前从未见过此错误,因此除了该链接之外,我无法帮助解决此问题。以下是文件的文档。walk:。它返回一个流。您正在尝试将这些路径存储到文件数组中。所以那是行不通的。香蕉装在香蕉盒里。鸡蛋放在鸡蛋盒里。我也一样,谢谢你。这就成功了。从Path对象中,您可以获得文件名,但它仍然是Path对象。要获取字符串,必须添加.toString()。
  File[] files = Files.walk(Paths.get(path))
      .filter(Files::isRegularFile)
      .toArray(File[]::new);
List<Path> pathList = Files.walk(Paths.get(path))
                           .filter(Files::isRegularFile)
                           .collect(Collectors.toList());

pathList.forEach(p -> System.out.println(p.getFileName()));
File[] files = Files.walk(Paths.get("."))
        .filter(Files::isRegularFile)
        .map(Path::toFile)
        .toArray(File[]::new);