Saludos
tengo el siguiente codigo :
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.io.RandomAccessFile;
public class Token {
public static void main(String[] args) {
int car;
String nombre,componenteLexico;
Scanner teclado = new Scanner(System.in);
System.out.print("Dame el nombre del archivo: ");
nombre = teclado.nextLine();
teclado.close();
try
{
File archivo = new File(nombre);
RandomAccessFile r = new RandomAccessFile(archivo,"r");
while((car = r.read()) != -1)
{
componenteLexico = Token.leerArchivo(nombre,r);
System.out.print(" "+componenteLexico);
}
r.close();
}
catch(IOException ex)
{
System.out.println("No se pudo abrir archivo");
}
}
public static String leerArchivo(String nombre,RandomAccessFile r)
{
int car;
char c;
long posicion;
String cadena = null;
StringBuilder sb = new StringBuilder();
try
{
posicion = r.getFilePointer();
r.seek(posicion-1);
while((car = r.read()) != ' ')
{
c = (char)car;
sb.append(c);
}
cadena = sb.toString();
}
catch(IOException ex)
{
System.out.println("No se pudo abrir archivo");
}
return cadena;
}
}
lo que hace es leer un archivo e ir guardando e imprimiendo cada una de las palabras que contiene este archivo, el problema es que me arroja una excepcion que dice:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
creo que tiene que ver con que estoy usando mal la clase StringBuilder, pero soy principiante y todavia no se manejar bien las excepciones.
gracias
Esa excepción se lanza cuando no hay memoria suficiente y el garbage collector no puede dar mas memoria a la máquina virtual de java. Es muy grande el fichero que lees?
No veo nada raro en el uso que le das a StringBuilder, podrías devolver sb.toString() y ahorrarte el String cadena.