Код: Выделить всё
Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2367)
at java.lang.AbstractStringBuilder.expandCapacity(AbstractStringBuilder.java:130)
at java.lang.AbstractStringBuilder.ensureCapacityInternal(AbstractStringBuilder.java:114)
at java.lang.AbstractStringBuilder.append(AbstractStringBuilder.java:535)
at java.lang.StringBuffer.append(StringBuffer.java:322)
at java.io.StringWriter.write(StringWriter.java:94)
at java.io.Writer.write(Writer.java:127)
at com.sun.org.apache.xml.internal.serialize.Printer.printText(Printer.java:170)
.....
Код: Выделить всё
...
public Document generateXML(File file, String type) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbf.newDocumentBuilder();
Document document = docBuilder.newDocument();
Element rootElement = document.createElement("data");
document.appendChild(rootElement);
Element informacionElement = document.createElement("information");
rootElement.appendChild(informacionElement);
Element entityElement = document.createElement("entity");
entityElement.appendChild(document.createTextNode("ANYTHING"));
informacionElement.appendChild(entityElement);
Element entityCode = document.createElement("code");
entityCode.appendChild(document.createTextNode(0000));
informacionElement.appendChild(entityCode);
Element fileElement = document.createElement("FILENAME");
fileElement.appendChild(document.createTextNode(file.getName()));
informacionElement.appendChild(fileElement);
Element detailElement = document.createElement("detail");
rootElement.appendChild(detailElement);
Path path = Paths.get(file.getAbsolutePath());
Scanner tmpFile = new Scanner(path, StandardCharsets.UTF_8.name());
String[] tmpTags = keyXml.get(type);
int row = 1;
while (tmpFile.hasNextLine()) {
Element rowElement = document.createElement("row");
filaElement.setAttribute("id", Integer.toString(row));
Scanner tmpLine = new Scanner(tmpFile.nextLine());
tmpLine.useDelimiter("\\|");
int index = 0;
while (tmpLine.hasNext()) {
Element element = document.createElement(tmpTags[index]);
String text = tmpLine.next().trim();
element.appendChild(document.createTextNode(text));
filaElement.appendChild(element);
++index;
}
detailElement.appendChild(filaElement);
++fila;
}
return document;
} catch (ParserConfigurationException | IOException ex) {
Logger.getLogger(HandlerXML.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
...
Код: Выделить всё
ANYTHING
0000
0099
2014
05
0015
06
06
000000000099907
098026
00000781.40
E
000000006804750
xxx
xxxx
xxx
xx
xxx
1014
05
11111
1014
00000000000000000000
3
20101
00000000
46671
1
N
A
............
слово, в котором получены XML-данные:
**0099|2014|05|0015|06|06 |00000000003101|066671|000077777.00|E|000000002719415|xxx|xxxxxx |хххххххх | | |хххххх | |1014|05|12254758|1014|00000000000000000000|3|20101|00000000|748596|1|X| | |В| | | | | **
Теперь представьте, что XML должен быть сгенерирован для 100000 строк информации, и, если вам интересно, все строки должны быть преобразованы в формат XML. >
Проблема в том, что когда вы преобразуете объект в STRING в DOCUMENT, я получаю показанную ранее ошибку: функция, которую я использую для преобразования DOCUMENT для STRING:
Код: Выделить всё
private static String convertDocumentToString(Document doc) {
TransformerFactory tf = TransformerFactory.newInstance();
Transformer transformer;
try {
transformer = tf.newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
return writer.getBuffer().toString();
}
catch (TransformerException e) {}
return "";
}
Заранее спасибо.
Подробнее здесь: https://stackoverflow.com/questions/257 ... heap-space