【发布时间】:2018-03-12 04:36:27
【问题描述】:
我正在尝试了解 Java 8 流功能。
我想在特定目录路径的所有子目录中捕获一个数组(也可以是列表)中的所有文件。
我的代码抛出 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);
谁能指出我正确的方向?
完整的堆栈跟踪是:
线程“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)
提前致谢!
【问题讨论】:
-
你能分享完整的堆栈跟踪吗?
-
我的错!感谢您的提示。这是一个 java.lang.ArrayStoreException 错误
-
这可能与Dealing with an ArrayStoreException 重复。不幸的是,我以前从未见过这个错误,所以除了那个链接我无能为力。
-
这里是 Files.walk 的文档:docs.oracle.com/javase/8/docs/api/java/nio/file/…。它返回一个 Stream
。您正在尝试将这些路径存储到文件数组中。所以这行不通。香蕉装在香蕉盒里。鸡蛋装在蛋盒里。这里也一样。 -
谢谢 JB。那成功了。从路径对象中,您可以获得文件名,但这仍然是路径对象。要获取字符串,您必须添加 .toString()。
标签: java-8 java-stream