Анализ нескольких XML-файлов в ZipInputStream ⇐ JAVA
Анализ нескольких XML-файлов в ZipInputStream
У меня есть функция экспорта, с помощью которой я упаковываю два XML-файла в ZIP-файл для загрузки. В своем UnitTest я хочу убедиться, что экспорт выполнен правильно, поэтому я снова читаю ZIP-файл и пытаюсь проанализировать XML. Я использую ZipInputStream, и работает следующий подход:
InputStream result = testee.openStream();//здесь создаются ZIP-файлы и XML-файлы попробуйте (вар zis = новый ZipInputStream (результат)) { вар firstEntry = zis.getNextEntry(); AssertNotNull (firstEntry); var nodesOne = getNodesByName(zis, "nodeOne"); AssertEquals(EXPECTED_NODE_ONE, nodesOne.getLength()); вар SecondEntry = zis.getNextEntry(); AssertNotNull (второйВход); вар nodesTwo = getNodesByName(zis, "nodeTwo"); AssertEquals(EXPECTED_NODE_TWO, AssertNotNull.getLength()); } NodeList getNodesByName (ZipInputStream zis, String nodeName) { вар xmlString = IOUtils.toString(zis); вар = новый InputSource (новый StringReader (xmlString)); var doc = DocumebtBuilderFactory.newInstance().newDocumentBuilder().parse(is); return doc.getElementsByTagName(nodeName); } Но более элегантным способом было бы заменить первые две строки в getNodesByName на это:
var is = new InputSource(new InputStreamReader(zis));
Это работает для первой записи, но вторая запись выдает исключение, поскольку, очевидно, InputStremReader закрывает ZipInputStream или считывает его полностью, а не только запись. Есть ли способ использовать потоки, которые учитывают необходимость чтения только первой записи?
У меня есть функция экспорта, с помощью которой я упаковываю два XML-файла в ZIP-файл для загрузки. В своем UnitTest я хочу убедиться, что экспорт выполнен правильно, поэтому я снова читаю ZIP-файл и пытаюсь проанализировать XML. Я использую ZipInputStream, и работает следующий подход:
InputStream result = testee.openStream();//здесь создаются ZIP-файлы и XML-файлы попробуйте (вар zis = новый ZipInputStream (результат)) { вар firstEntry = zis.getNextEntry(); AssertNotNull (firstEntry); var nodesOne = getNodesByName(zis, "nodeOne"); AssertEquals(EXPECTED_NODE_ONE, nodesOne.getLength()); вар SecondEntry = zis.getNextEntry(); AssertNotNull (второйВход); вар nodesTwo = getNodesByName(zis, "nodeTwo"); AssertEquals(EXPECTED_NODE_TWO, AssertNotNull.getLength()); } NodeList getNodesByName (ZipInputStream zis, String nodeName) { вар xmlString = IOUtils.toString(zis); вар = новый InputSource (новый StringReader (xmlString)); var doc = DocumebtBuilderFactory.newInstance().newDocumentBuilder().parse(is); return doc.getElementsByTagName(nodeName); } Но более элегантным способом было бы заменить первые две строки в getNodesByName на это:
var is = new InputSource(new InputStreamReader(zis));
Это работает для первой записи, но вторая запись выдает исключение, поскольку, очевидно, InputStremReader закрывает ZipInputStream или считывает его полностью, а не только запись. Есть ли способ использовать потоки, которые учитывают необходимость чтения только первой записи?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Android ZipInputStream: только записи DEFLATED могут иметь дескриптор EXT
Гость » » в форуме Android - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Гость
-