Вопрос

В настоящее время я использую 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.

Другие советы

Бен Надел из Kinky Solutions fame написал компонент, который мог бы справиться с вашей ситуацией.Посмотрите и отчитайтесь, помог ли вам его проект.

POI Утилита ColdFusion Component Компонент ColdFusion

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top