//Parse an HTML file into text while preserving carriage returns
StringBuffer temp = new StringBuffer(html);
final StringBuffer sb = new StringBuffer();//this will be my output
HTMLEditorKit.ParserCallback parserCallback = new
HTMLEditorKit.ParserCallback() {
public boolean readyForNewline;
@Override
public void handleText(final char[] data, final int pos) {
String s = new String(data);
sb.append(s.trim() + " ");
readyForNewline = true;
}
@Override
public void handleStartTag(final HTML.Tag t,
final MutableAttributeSet a,
final int pos) {
if (readyForNewline &&
(t == HTML.Tag.DIV || t == HTML.Tag.BR ||
t == HTML.Tag.P || t == HTML.Tag.TR)) {
sb.append("\n");
readyForNewline = false;
}
}
@Override
public void handleSimpleTag(final HTML.Tag t,
final MutableAttributeSet a,
final int pos) {
handleStartTag(t, a, pos);
}
};
try {
new ParserDelegator().parse(new StringReader(temp.toString()),
parserCallback, false);
} catch (IOException e) {
return null;
}
Этот код отлично работает с небольшими html-файлами, но когда я пытаюсь проанализировать HTML-файл размером около 4 МБ, который был преобразован в строку, он выдает исключение IOException, и я понятия не имею, почему? Это прямо в этом цикле try, мне потребовалось некоторое время, чтобы найти его, так как консоль не печатает ошибку.
По сути, этот код предназначен для извлечения файлов HTML и удаления тегов с сохранением межстрочного интервала. Я нашел этот код на SO и заимствую его, альтернативные решения тоже хороши, но из JSoup и многих других это единственное, что достигает того, что я хочу (в любом случае, для небольших файлов). Есть ли причина, по которой этот код будет вызывать исключение IOException, когда файл слишком велик? Способы исправить это?
Благодаря тонну!
РЕДАКТИРОВАТЬ: вот стек
javax.swing.text.ChangedCharSetException
at javax.swing.text.html.parser.DocumentParser.handleEmptyTag(Unknown Source)
at javax.swing.text.html.parser.Parser.startTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseTag(Unknown Source)
at javax.swing.text.html.parser.Parser.parseContent(Unknown Source)
at javax.swing.text.html.parser.Parser.parse(Unknown Source)
at javax.swing.text.html.parser.DocumentParser.parse(Unknown Source)
at javax.swing.text.html.parser.ParserDelegator.parse(Unknown Source)
at org.SmartTable.SmartTable.htmlToText(SmartTable.java:293)
at org.SmartTable.SmartTable.<init>(SmartTable.java:35)