我正在尝试理解Java 8 Stream-feature。
我想在特定目录路径的所有子目录中捕获数组中的所有文件(也可能是列表)。
我的代码抛出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);
有人能指出我正确的方向吗?
完整堆栈跟踪是:
线程中的异常&#34; main&#34; java.lang.ArrayStoreException at java.lang.System.arraycopy(Native Method)at java.util.stream.SpinedBuffer.copyInto(SpinedBuffer.java:198)at at java.util.stream.Nodes $ SpinedNodeBuilder.copyInto(Nodes.java:1290)at at java.util.stream.SpinedBuffer.asArray(SpinedBuffer.java:215)at at java.util.stream.Nodes $ SpinedNodeBuilder.asArray(Nodes.java:1296)at at java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:439) 在 nachbearbeitung.CheckExistingMAIDs.main(CheckExistingMAIDs.java:41)
提前致谢!
答案 0 :(得分:5)
ArrayStoreException
并非特定于Java流,它是非常古老的Java Exception,这意味着您希望在数组中存储不兼容类型的元素。在您的情况下,您想要创建一个File
个对象的数组。但实际上您正在尝试在Path
处存储Files.walk
个对象,因为Stream<Path>
生成Stream<File>
,而不是Path
。要将File
转换为Path.toFile
,您可以使用map
方法在File[] files = Files.walk(Paths.get("."))
.filter(Files::isRegularFile)
.map(Path::toFile)
.toArray(File[]::new);
步骤中调用它:
Function FunctionName(str)
Dim resultStr
Dim wordArr
wordArr = Array(Split(str, "_"))
For Each item In wordArr
resultStr = resultStr & UppercaseFirstLetter(item)
Next item
FunctionName = resultStr
End Function 'FunctionName
答案 1 :(得分:2)
仅列出文件名:
List<Path> pathList = Files.walk(Paths.get(path))
.filter(Files::isRegularFile)
.collect(Collectors.toList());
pathList.forEach(p -> System.out.println(p.getFileName()));
无法在流中存储方法的本地变量:.forEach(p -> existingNames.add(p.getFileName()));