public static String getDocument(File html) {
String htmlPath = html.getAbsolutePath();
String text = "";
Parser parser = null;
try {
parser = new Parser(htmlPath);
} catch (ParserException e) {
e.printStackTrace();
}
try {
parser.setEncoding("UTF-8");
// parser.setEncoding("gbk");
} catch (ParserException e) {
e.printStackTrace();
}
HtmlPage visitor = new HtmlPage(parser);
try {
parser.visitAllNodesWith(visitor);
} catch (ParserException e) {
e.printStackTrace();
}
NodeList nodes = visitor.getBody();
int size = nodes.size();
for (int i = 0; i < size; i++) {
Node node = nodes.elementAt(i);
text += node.toPlainTextString();
}
return text;
} 我在循环读取HTML文件中的文本内容时 大概到1000+个文件以后
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
完整异常信息如下:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at org.htmlparser.lexer.Stream.fill(Stream.java:162)
at org.htmlparser.lexer.Stream.read(Stream.java:266)
at java.io.InputStream.read(InputStream.java:163)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
at java.io.InputStreamReader.read(InputStreamReader.java:167)
at org.htmlparser.lexer.InputStreamSource.fill(InputStreamSource.java:345)
at org.htmlparser.lexer.InputStreamSource.read(InputStreamSource.java:395)
at org.htmlparser.lexer.Page.getCharacter(Page.java:704)
at org.htmlparser.lexer.Lexer.parseTag(Lexer.java:1009)
at org.htmlparser.lexer.Lexer.nextNode(Lexer.java:368)
at org.htmlparser.scanners.CompositeTagScanner.scan(CompositeTagScanner.java:110)
at org.htmlparser.util.IteratorImpl.nextNode(IteratorImpl.java:91)
at org.htmlparser.Parser.visitAllNodesWith(Parser.java:726)
at ch2.lucenedemo.lucene29.SolrjClient8080.getDocument(SolrjClient8080.java:323)
at ch2.lucenedemo.lucene29.SolrjClient8080.createIndex(SolrjClient8080.java:243)
at ch2.lucenedemo.lucene29.SolrjClient8080.main(SolrjClient8080.java:139)######
我认为可能的解决方案有:
第一、
不用String,改为用StringBuffer试试。
第二、
调大Java VM的内存,不过当读取的内容增大到一定程度还会发生同样的问题。
第三、
可以采用分段读取或者读一段存一段(比如存到硬盘中),有点类似操作系统中的缓存(缓存大小有限度,当满了则全部写入,再读)。
不知道能否解决你的问题~
######别用这东西了,用jsoup吧,简单方便
######谢谢2位的回答
我都试试