У меня есть файл в 17.5 мб, и где-то в середине все ломается ( то есть до этого понятное дело нормально проходит). В общем. main:
package main.java.SimanticAnalysis;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
public class SimanticAnalysisApplication {
private static ArrayList<Comment> comments = new ArrayList<>();
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
XMLHandler handler = new XMLHandler();
parser.parse(new File(
"/Users/Yaroslav/Desktop/SimaticAnalysis/src/main/resource/MyComments3.xml"), handler);
int size = 0;
for (Comment comment: comments){
size++;
}
System.out.print(size);
}
private static class XMLHandler extends DefaultHandler {
private Integer score, content_id, element_id, user_id;
private String text = "", lastElementName;
private Attributes attributesForCharacters;
@Override
public void startDocument() throws SAXException {
// Тут будет логика реакции на начало документа
}
@Override
public void endDocument() throws SAXException {
// Тут будет логика реакции на конец документа
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes)
throws SAXException {
// Тут будет логика реакции на начало элемента
lastElementName = qName;
attributesForCharacters = attributes;
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// Тут будет логика реакции на конец элемента
if( score != null && content_id != null && element_id != null && user_id != null &&
!text.equals("") ){
System.out.print("add Comment!");
comments.add(new Comment(score, content_id, element_id, user_id, text));
score = null;
content_id = null;
element_id = null;
user_id = null;
text = "";
}
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
String information = new String(ch, start, length);
System.out.print(lastElementName+" ");
System.out.print(attributesForCharacters.getValue("columnNumber")+" ");
System.out.print(information + "\n");
information = information.replace("\n", "").trim();
if (!information.isEmpty()) {
if (lastElementName.equals("value")
&& attributesForCharacters.getValue("columnNumber").equals("0"))
score = Integer.parseInt(information);
if (lastElementName.equals("value")
&& attributesForCharacters.getValue("columnNumber").equals("1"))
content_id = Integer.parseInt(information);
if (lastElementName.equals("value")
&& attributesForCharacters.getValue("columnNumber").equals("2"))
element_id = Integer.parseInt(information);
if (lastElementName.equals("value")
&& attributesForCharacters.getValue("columnNumber").equals("3"))
user_id = Integer.parseInt(information);
if (lastElementName.equals("value")
&& attributesForCharacters.getValue("columnNumber").equals("4"))
text = text + information;
}
}
@Override
public void ignorableWhitespace(char[] ch, int start, int length) throws SAXException {
// Тут будет логика реакции на пустое пространство внутри элементов (пробелы, переносы строчек и так далее).
}
}
}
Класс Comment:
package main.java.SimanticAnalysis;
public class Comment {
private Integer score, content_id, element_id, user_id;
private String text;
public Comment(int score, int content_id, int element_id, int user_id, String text){
this.score = score;
this.content_id = content_id;
this.element_id = element_id;
this.user_id = user_id;
this.text = text;
}
public Integer getScore(){ return score; }
public Integer getContent_id(){ return content_id; }
public Integer getElement_id(){ return element_id; }
public Integer getUser_id(){ return user_id; }
public String getText(){ return text; }
}
Ошибка в
Что выдает java
то-есть он считывает columnNumber и получает 1, а должен 4... В чем может быть проблема?
Ps. Если из кода удалить элементы content_id, element_id и user_id, то он уйдет дальше до 50тыс строчки, но все равно заглохнет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты