Kla*_*ter 2 java-8 java-stream
我试图了解Java 8 Stream功能.
我想在特定目录路径的所有子目录中捕获数组中的所有文件(也可能是列表).
我的代码抛出了java.lang.ArrayStoreException错误
Run Code Online (Sandbox Code Playgroud)File[] files = Files.walk(Paths.get(path)) .filter(Files::isRegularFile) .toArray(File[]::new);
我尝试的另一件事是将文件名添加到现有的ArrayList:
Run Code Online (Sandbox Code Playgroud)ArrayList<String> existingNames = new ArrayList<String>(); Files.walk(Paths.get(path)) .filter(Files::isRegularFile) .forEach(p -> existingNames.add(p.getFileName()));
这也会抛出java.lang.ArrayStoreException错误.
我用同样的结果尝试的其他东西是:
Run Code Online (Sandbox Code Playgroud)File[] files = Files.walk(Paths.get(path)) .filter(Files::isRegularFile) .toArray(File[]::new);
谁能指出我正确的方向?
完整的堆栈跟踪是:
java.util.stream.Nodes的java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:198)java.lang.System.arraycopy(Native Method)中的线程"main"java.lang.ArrayStoreException中的异常$ SpinedNodeBuilder .copyInto(Nodes.java:1290)位于java.util.stream上的java.util.stream.R井(SpinedBuffer.java:215)和java.util的$ SpinedNodeBuilder.asArray(Nodes.java:1296).在nachbearbeitung.CheckExistingMAIDs.main(CheckExistingMAIDs.java:41)的stream.ReferencePipeline.toArray(ReferencePipeline.java:439)
提前致谢!
An ArrayStoreException并不特定于Java流,它是非常古老的Java异常,这意味着您希望在数组中存储不兼容类型的元素.在您的情况下,您想要创建一个File对象数组.但实际上你正试图在Path那里存储物体,因为Files.walk产生了物体Stream<Path>而不是物体Stream<File>.要将a转换Path为a,File您可以使用Path.toFile在map步骤中调用它的方法:
File[] files = Files.walk(Paths.get("."))
.filter(Files::isRegularFile)
.map(Path::toFile)
.toArray(File[]::new);
Run Code Online (Sandbox Code Playgroud)