Java - ParserDelegator выдает исключение, когда ввод большой

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

person Josh T    schedule 06.09.2013    source источник
comment
Вы можете опубликовать стек исключения?   -  person Claudiu    schedule 06.09.2013
comment
Я просто отредактировал это в основном посте   -  person Josh T    schedule 06.09.2013
comment
РЕШЕНИЕ: новый ParserDelegator().parse(новый StringReader(temp.toString()), parserCallback, true); // изменить последнее значение false на true, чтобы игнорировать кодировку   -  person Josh T    schedule 06.09.2013


Ответы (1)


новый ParserDelegator().parse(новый StringReader(temp.toString()), parserCallback, true);

// изменить последнее "false" на true, чтобы игнорировать кодировку

person Josh T    schedule 09.09.2013