• Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other Pie Elite all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Campbell Ritchie
  • Ron McLeod
  • Paul Clapham
  • Devaka Cooray
  • Liutauras Vilda
Sheriffs:
  • Jeanne Boyarsky
  • paul wheaton
  • Henry Wong
Saloon Keepers:
  • Stephan van Hulst
  • Tim Holloway
  • Tim Moores
  • Carey Brown
  • Mikalai Zaikin
Bartenders:
  • Lou Hamers
  • Piet Souris
  • Frits Walraven

"Exception in thread "main" java.lang.OutOfMemoryError"

 
Greenhorn
Posts: 14
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Hi there !!!

I am using this program - I found it on the net - and what it basically does is to convert comma separeted files into xml files. Everything workes fine until I start using files with loads of data. For instance I have a 2,350 KB of data that gives me the following error: "Exception in thread "main" java.lang.OutOfMemoryError " , but when I take half of the files content off it works without any problems. Can someone out there help me, on way it happens ? I am posting the full program code bellow. Please Help !!!



/*
* CSVToXML.java
*
* @version 1.0
*
*
* @author Danny Ayers
* @created 23 February 2001
*/

import java.util.*;
import java.io.*;

/**
* Converts CSV data file into XML
*/
public class CSVToXML {

public final static String PROLOG = "<?xml version=\"1.0\"?>";
public final static String OPEN_START = "<";
public final static String OPEN_END = "</";
public final static String CLOSE = ">";
public final static String NEWLINE = "\n";
public final static String INDENT = "\t";

private String delimiter;
private int nfields;
private int nrows;
private String header;
private String rowname;
private String rootname;
private String[] fieldnames;


public static void main(String filenames[]) {

filenames = new String[]{"csvpro.txt","Source1.txt","dest.txt"};
if (filenames.length != 3) {
System.out.println("java CSVToXML [properties file] [source] [destination]");
System.exit(1);
}
new CSVToXML(filenames);
}

public CSVToXML(String filenames[]) {
Properties props = loadProperties(filenames[0]);
setParameters(props);
String source = loadString(filenames[1]);
String outFile = filenames[2];

ArrayList items = stringToArrayList(source, delimiter);
nrows = items.size() / nfields;
String output = convert(items);
saveString(outFile, output);
}

public Properties loadProperties(String filename) {
Properties props = new Properties();
FileInputStream instream;;
BufferedInputStream buffer;

try {
instream = new FileInputStream(filename);
buffer = new BufferedInputStream(instream);
props.load(buffer);
buffer.close();
instream.close();
} catch (Exception e) {
System.out.println(e);
}
return props;
}

public void setParameters(Properties props) {
delimiter = props.getProperty("delimiter");
rootname = props.getProperty("rootname");
rowname = props.getProperty("recordname");

String prolog = props.getProperty("prolog");
String dtd = props.getProperty("dtd");
String comment = props.getProperty("comment");

/*
header = PROLOG + NEWLINE
+ "<DOCTYPE " + rootname + " SYSTEM " + dtd + ">" + NEWLINE + NEWLINE
+ "<!-- " + comment + " -->" + NEWLINE;
*/

header = PROLOG + NEWLINE
+ "<!-- " + comment + " -->" + NEWLINE;

nfields = Integer.parseInt(props.getProperty("fields"));

fieldnames = new String[nfields];
String fieldref;

for (int field = 0; field < nfields; field++) {
fieldref = "field" + field;
fieldnames[field] = props.getProperty(fieldref);
}


}

public String loadString(String filename) {
StringBuffer text = new StringBuffer();
FileInputStream instream;
BufferedInputStream buffer;
int readint;
// Remove the buffered input stream (for now)
// Do not call read(buffer). Instead call readFully(buffer). You are not checking how many bytes were actually read in your logic



try {
instream = new FileInputStream(filename);
buffer = new BufferedInputStream(instream);
while ((readint = buffer.read()) != -1) {

text.append( (char) readint);
}
buffer.close();
instream.close();
} catch (Exception e) {
e.printStackTrace();
}
return text.toString();
}



public ArrayList stringToArrayList(String source, String delim) {
ArrayList alist = new ArrayList();
String word;
StringTokenizer st = new StringTokenizer(source, delim);
while (st.hasMoreTokens()) {
word = st.nextToken();
// word = stripSpaces(word);
alist.add(word);
}
return alist;
}

public String stripSpaces(String s) {
while (Character.isWhitespace(s.charAt(0))) {
s = s.substring(1, s.length());
}
return s;
}

public String convert(ArrayList items) {
StringBuffer output = new StringBuffer();
output.append(header);
output.append(NEWLINE);
output.append(OPEN_START + rootname + CLOSE);
output.append(NEWLINE);

Iterator values = items.iterator();
String value;
for (int rowcount = 0; rowcount < nrows; rowcount++) {
output.append(INDENT + OPEN_START + rowname + CLOSE + NEWLINE);

for (int field = 0; field < nfields; field++) {
output.append(INDENT + INDENT + OPEN_START + fieldnames[field] + CLOSE);
value = (String) values.next();
output.append(value);
output.append(OPEN_END + fieldnames[field] + CLOSE + NEWLINE);

}

output.append(INDENT + OPEN_END + rowname + CLOSE);
output.append(NEWLINE);
}
output.append(OPEN_END + rootname + CLOSE);
output.append(NEWLINE);
return output.toString();
}



public void saveString(String filename, String string) {

FileOutputStream outstream;
BufferedOutputStream buffer;
int length;
byte[] bytes;
try {
outstream = new FileOutputStream(filename);
buffer = new BufferedOutputStream(outstream);
bytes = string.getBytes();
length = string.length();
for (int i = 0; i < length; i++) {
buffer.write(bytes[i]);
}
buffer.close();
outstream.close();
} catch (Exception e) {
e.printStackTrace();
}
}

}
 
Carla carmona
Greenhorn
Posts: 14
  • Mark post as helpful
  • send pies
    Number of slices to send:
    Optional 'thank-you' note:
  • Quote
  • Report post to moderator
Thanks if you tried to help. Solucion found. Just called "java -Xmx250m" plus the of the command prompt parameters to increase the amount of memory available to the program and voila, problem solved. May the force be with you all.

Jose Cardoso
 
The glass is neither half full or half empty. It is too big. But this tiny ad is just right:
We need your help - Coderanch server fundraiser
https://coderanch.com/wiki/782867/Coderanch-server-fundraiser
reply
    Bookmark Topic Watch Topic
  • New Topic