如何使用getViewableIterator在POI
-
16-09-2019 - |
题
我目前使用POI试图提取文本了一批Word文档中,我需要能够确定哪些条目文档中包含。我已经能够尽量得到的拉文档根目录和拉动中的第一项,但我希望能够查看所有条目。该getEntries()
方法似乎提供这个功能,但我在一个不知如何使用getViewableIterator()
拉出来。
下面是我的代码明智的:
<cfset myFile = createObject("java", "java.io.FileInputStream").init(fileInputPath)>
<cfset fileSystem = CreateObject( "java", "org.apache.poi.poifs.filesystem.POIFSFileSystem" ).Init(myFile)>
<cfloop from="1" to="#fileSystem.getRoot().getEntryCount()#" index="i">
<cfset viewableIterator = fileSystem.getRoot().getEntries().next().getViewableIterator()>
<cfset nextEntry = fileSystem.getRoot().getEntries().next()>
<cfif viewableIterator.hasNext()>
<cfdump var="#nextEntry.getShortDescription()#">
<cfset viewableIterator.remove()>
</cfif>
</cfloop>
在第一循环中,我能够获得的第一项就好了。但是,我只要执行java.lang.IllegalStateException
得到remove()
错误。很显然,我没有正确使用方法remove()
,但我一直没能找到这个应该怎么正确使用任何例子。任何帮助,将不胜感激。
解决方案
我真的不明白你的XML标记(我通常使用Java以正常形式,用花括号和东西),但一般一个Java迭代器的工作原理如下所示:
while(iterator.hasNext()) {
x = iterator.next(); // get element
// do with x what you want
if (/*you want to remove x from the underlying list*/)
iterator.remove();
}
在实践中,取出只使用很少,在情况下,你想通过收集和删除一切你不需要任何再在里面。删除如果的收集是只读的,或者如果你想在同一时间两个不同的迭代器遍历两次可能会失败。只要坚持hasNext和next。
其他提示
淫解决方案成名奔纳德尔写道,可能会处理你的情况的组件。给看看看,并报告回来,如果他的项目帮助你。
不隶属于 StackOverflow