Vuelta a el error null¡

Tengo este código para crear un fichero csv, me da error a la hora de escribir en el fichero csv creado, me da null, como si no lo encontrase, seguro que es algo de los try, pero no consigo encontrar el error.
Te paso el código por si acaso lo ves tu, muchas gracias.
public FileWriter EscribirSalida=null;
public int contadorvariables=0;
public String delimitadorcoma=",";
public int ultima_linea;
public int primera_linea;
public HSSFRow filaExcel=null;
public HSSFCell celdaExcel=null;
public int tipocelda;
public double contenidoCelda0=0;
public String contenidoCelda;
int filasCSV=0;
private void jButton3_actionPerformed(ActionEvent e)
{
//ClassOperacionesPaciente op=new ClassOperacionesPaciente();
//op.ConversorCSV(ruta);
//System.out.println("enlace con el metodo conversor csv con exito");
//funcion que convierte el fichero excel en csv
//voy a crear el fichero en csv para excel pero voy a utilizar los metodos de jakarta poi
try{
File ficheroSalida= new File ("c:/salida.csv");
FileWriter EscribirSalida= new FileWriter (ficheroSalida);
System.out.println("exito en la creacion del fichero csv");
POIFSFileSystem ficheroEntrada = new POIFSFileSystem (new FileInputStream (ruta));
System.out.println("exito en la lectura del fichero excel");
HSSFWorkbook librotrabajo = new HSSFWorkbook (ficheroEntrada);
System.out.println("exito en la lectura del libro de trabajo");
HSSFSheet hojaleer = librotrabajo.getSheet("Hoja1");
System.out.println("apertura e inicializacion de la hoja de calculo y libro con exito");
primera_linea=hojaleer.getLastRowNum();
System.out.println("primera linea ocupada es "+primera_linea);
ultima_linea=hojaleer.getLastRowNum();
System.out.println("ultima linea ocupada del fichero excel "+ultima_linea);
for(int fila=0;fila<=ultima_linea;fila++)
{
for(int colum=0;colum<=26;colum++){
filaExcel=hojaleer.getRow(fila);
if(filaExcel!=null){
celdaExcel=filaExcel.getCell((short)colum);
if (celdaExcel!=null){
tipocelda=celdaExcel.getCellType();
System.out.println("exito en la lectura de tipo de la celda");
}
switch(tipocelda){
case 0://la celda es de tipo numerico,leer el contenido de la celda
contenidoCelda0=celdaExcel.getNumericCellValue();
String contenidoCelda=Double.toString(contenidoCelda0);
case 1://la celda es de tipo string,leer el contenido de la celda
contenidoCelda=celdaExcel.getStringCellValue();
}//fin switch
//pasamos a escribir el contenido de la celda en el fichero de salida csv
if (contadorvariables!=26)
{
//try{
EscribirSalida.write(contenidoCelda);
EscribirSalida.flush();
EscribirSalida.write((String)delimitadorcoma);
EscribirSalida.flush();
System.out.println("exito en la escritura del fichero csv sin ser el ultimo");
contadorvariables++;
//}
//catch(Exception ex)
//{
//System.out.println("Error en la escritura del fichero de salida sin ser el ultimo "+ex.getMessage());
//}
}
else
{
try{
EscribirSalida.write(contenidoCelda);
EscribirSalida.flush();
System.out.println("exito en la escritura del fichero csv cuando es el ultimo");
contadorvariables=0;
}
catch(Exception ex)
{
System.out.println("error en la escritura del fichero csv cunado es el ultimo");
}
}
}//fin if fila null
}//fin del if
}//fin for atributos(columnas)
}//fin for filas
catch(Exception ex)
{
System.out.println("error en la creacion del fichero csv");
System.out.println("error en la lectura del fichero excel");
System.out.println("error en la lectura del libro de trabajo y en la hoja");
}
if(EscribirSalida!=null)
{
try{
EscribirSalida.close();
}
catch(Exception ex)
{
System.out.println("error en el cierre del fichero csv");
}
}
}//fin boton
}
//fin clase

1 respuesta

Respuesta
1
Creo que tienes un try que te puede dar problemas:
else
{
try{
EscribirSalida.write(contenidoCelda);
EscribirSalida.flush();
Quizás se te ha pasado el comentarlo. Coméntalo e intentalo de nuevo.
veamos, lo de "Invalid escape character" me parece que da cuando el interpreta la barrita de los subdirectorios "/" como un codigo de escape, lo que tienes que hacer es, en un string, si quieres que te tome como tal la barrita, poner 2, es decir;
"//"+"directorio"+"//"+"fichero"
De todas formas, y por si tienes problemas, el java tiene definido por defecto cual es la barrita de subdirectorio (es diferente en unix, linus y en Windows) como una variable a la que puedes llamar siempre que lo necesites. Prueba a ponerlo como te digo e indicame si te funciona.
Te he pasado el código del botón que me gustaría que funcionase, esat too un poco guarro, pero mi intención es que cuando funcionen las cosas, estructurarlas separando los métodos en clases, para que quede todo más sencillo.
La variable ruta la tengo declarada en la clase como "public static", de todas formas también he probado en colocarle directamente la ruta del fichero y no compila, me sale error de "invalid escape character", el nombre del fichero esta bien y la ruta también y lo introduzco como string, ¿no se a que se puede referir?
En cuanto a si tiene valor, el fichero excel no esta vacío, y anteriormente lo he utilizado en otro botón para añadir datos y no ha dado error.
Así que no se, ¿Si se te ocurre alguna otra cosa? Y sobre todo muchas gracias
Hols, bien, a ver si sacamos donde esta el errorcillo.
En esta linea:
POIFSFileSystem ficheroEntrada = new POIFSFileSystem (new FileInputStream (ruta));
no veo en donde tienes definido la variable "ruta". ¿Es una variable global? ¿Tiene valor justo antes de llegar a este punto?
Hola de nuevo¡
He comentado el segundo try y sigue dando problemas, ahora salta directamente al la excepción del primer try, da error al crear el fichero csv, error al leer el fichero excel de entrada y error al leer el libro de trabajo y la hoja... todos ellos error null, en fin no se por donde tirar sime puedes seguir orientamdo, lo agradecería mucho.
Saludos
Hola¡
ya funciona¡¡ he metido el if de escritura dentro del switch para cada caso,dentro del switch leeia el valor de la celda pero cuando salia lo perdia.
Muchas gracias
Saludos

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas