Pregunta

Actualmente estoy usando PDI para intentar extraer el texto de un lote de documentos de Word y tengo que ser capaz de determinar qué entradas contiene un documento. He sido capaz de llegar tan lejos como tirando de la raíz del documento y tirando de la primera entrada, pero quiero ser capaz de ver todas las entradas. El método getEntries() parece proporcionar esta funcionalidad, pero estoy en una pérdida en cuanto a cómo utilizar getViewableIterator() para sacarlos.

A continuación se muestra lo que tengo código en cuanto a:

<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>

En el primer bucle, soy capaz de obtener la primera entrada muy bien. Sin embargo, me da un error java.lang.IllegalStateException tan pronto como se ejecuta remove(). Obviamente no estoy usando el método remove() correctamente, pero no he podido encontrar ningún ejemplo de cómo debe ser utilizado correctamente. Cualquier ayuda sería muy apreciada.

¿Fue útil?

Solución

No entiendo muy bien sus etiquetas XML (por lo general el uso de Java en su forma normal, con llaves y otras cosas), pero en general un iterador Java funciona como la siguiente:

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();
}

En la práctica, retire sólo se utiliza muy raramente, en los casos en que desea ir a través de una colección y eliminar todo lo que no es necesario aún en él. quite puede fallar si la collecion es de sólo lectura o si usted está tratando de iterar sobre ella dos veces con dos iteradores diferentes al mismo tiempo. Sólo se adhieren con hasNext y el próximo.

Otros consejos

Ben Nadel de Kinky Soluciones fama escribió un componente que puede manejar su situación. Dar una mirada ver e informar si su proyecto le ayudó.

POI Utilidad ColdFusion Componente

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top