Solución para Java de un error null al intentar escribir el contenido de la celda en el fichero

Gracias por la aclaración de los métodos de ficheros, mi aplicación, ya parece que va tomando forma¡
Ahora me he encontrado con un error null al intentar escribir el contenido de la celda en el fichero.
Si que lee el valor correctamente de la celda y el fichero si que esta creado para escribir, así que no se donde mirar, si podrías orientarme por donde seguir, se me han acabado las ideas...
te escribo el codigo,
public class GenerarCSV
{
//public GenerarCSV()
//{
//}
//crear una funcion que me genere un fichero de formato csv (delimitador de comas)
public File ficheroSalida;
public FileWriter EscribirSalida;
public int filastotales;
public int variablestotales=2;
double valor_numerico;
public int prueba2;
//File ficheroSalida= new File ("c:/salida.csv");
String valor_celda;
public int lineaAtributos;
public HSSFCell celdaLeer;
public HSSFSheet hojaleer;
public HSSFWorkbook librotrabajo;
int contadorAtributos=0;
public String delimitadorcoma=",";
int tipocelda;
String valor;
String valor_letra;
//Leer la primera fila del fichero xls que son los atributos y escribirlas en el fichero csv
//try
//{
public void GenerarFicheroCSV (String nombreExcel){
FileWriter EScribirSalida=null;
try{
File ficheroSalida= new File ("c:/salida.csv");
FileWriter EscribirSalida= new FileWriter (ficheroSalida);
System.out.println("exito en la creacion del fichero csv");
}
catch (Exception ex)
{
System.out.println("error al crear el fichero para la escritura");
}
try{
POIFSFileSystem ficheroEntrada = new POIFSFileSystem (new FileInputStream ("c:/PRUEBA.xls"));
System.out.println("apertura e inicializacion de la hoja de calculo y libro con exito");
HSSFWorkbook librotrabajo2 = new HSSFWorkbook (ficheroEntrada);
HSSFSheet hojaleer = librotrabajo2.getSheet("Hoja1");
int pruebalineas = hojaleer.getFirstRowNum();
System.out.println("primera linea ocupada"+pruebalineas);
int prueba2=hojaleer.getLastRowNum();
System.out.println("ultima linea ocupada"+prueba2);
filastotales=hojaleer.getPhysicalNumberOfRows();
System.out.println("numero de filas totales del fichero excel son: "+filastotales);
//lineaAtributos = hojaleer.getFirstRowNum();
for (int i=0;i<filastotales;i++){//para cada fila del fichero excel hacer
for(int j=0;j<=variablestotales;j++)//para cada columna del fichero hacer
{
HSSFRow filatoca= hojaleer.getRow(i);
HSSFCell celdaLeer = filatoca.getCell((short)j);
try{
tipocelda=celdaLeer.getCellType();
System.out.println("exito en la lectura del tipo de la celda");
}
catch (Exception e)
{
System.out.println("Error al leer el tipo de la celda");
}
switch (tipocelda)
{
case 0://tipo entero convertirlo a string
valor_numerico=celdaLeer.getNumericCellValue();
valor=String.valueOf(valor_numerico);
System.out.println("exito conversion de tipos entero string");
case 1:
valor_letra=celdaLeer.getStringCellValue();
System.out.println("exito lectura de celda de valor string");
break;
}
//escribir los resultados en el fichero csv.
//ficheroSalida.write();
//ficheroSalida.write((String)delimitadorcomas);
if(j==variablestotales)
{
if(tipocelda==0){
//escribir la celda en el fichero,no escribir el delimitador y pasar a la fila siguiente
try
{
EscribirSalida.write(valor);
//EscribirSalida.flush();
System.out.println("exito en la escritura del fichero del valor inicialmente entero");
}
catch(Exception e)
{
System.out.println("error al escribir en el fichero el valor tipo 0");
}
}
if(tipocelda==1)
{
try
{
EscribirSalida.write(valor_letra);
//EscribirSalida.flush();
System.out.println("exito en la segunda escritura");
}
catch(Exception e)
{
System.out.println("error al escribir en el fichero el valor letra tipo 1");
}
}
}
else{
System.out.println("EL VALOR DE LA CELDA TIPO 0 ES: "+valor);
System.out.println("EL VALOR DE LA CELDA TIPO 1 ES: "+valor_letra);
//Escribir la celda en el fichero, escribir el delimitador y seguir con la celda siguiente
if(tipocelda==0)
{
try{
EscribirSalida.write(valor);
//EscribirSalida.flush();
EscribirSalida.write(delimitadorcoma);
//EscribirSalida.flush();
System.out.println("escritura del limitador con exito");
}
catch(Exception e){
System.out.println("error al escribir valor tipo celda con el delimitador");
}
}
if (tipocelda==1){
try
{
EscribirSalida.write(valor_letra);
//EscribirSalida.flush();
//EscribirSalida.write(delimitadorcoma);
//EscribirSalida.flush();
System.out.println("escritura del limitador tipo1 con exito");
}
catch(Exception e){
System.out.println("error al escribir en el fichero el valor letra tipo 1 con delimtador de comas "+e.getMessage());
}
}
}
}//fin for columnas
}//fin for filas
}
catch(Exception ec)
{
System.out.println("error al crear el libro de trabajo y la hoja del fichero excel");
}
if (EscribirSalida!=null){
try{
EscribirSalida.close();
}
catch(Exception e)
{
System.out.println("error al cerrar el fichero de escritura");
}
}
}
}

1 Respuesta

Respuesta
1
El problema es que estas definiendo una variable (EscribirSalida) en un bloque TRY y la estas usando en otro bloque TRY diferente.
Yo he metido todo dentro de un mismo bloque y funciona, echale un vistazo y modifícalo a tu gusto.
Un saludo
import java.io.File;
import java.io.FileWriter;
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class GenerarCSV
{
public GenerarCSV() {
GenerarFicheroCSV("ejemplo");
}
public static void main (String [] args){
GenerarCSV G = new GenerarCSV();
}
//crear una funcion que me genere un fichero de formato csv (delimitador de comas)
public File ficheroSalida;
public FileWriter EscribirSalida;
public int filastotales;
public int variablestotales=2;
double valor_numerico;
public int prueba2;
//File ficheroSalida= new File ("d:/Programillas Java/salida.csv");
String valor_celda=new String();
public int lineaAtributos;
public HSSFCell celdaLeer;
public HSSFSheet hojaleer;
public HSSFWorkbook librotrabajo;
int contadorAtributos=0;
public String delimitadorcoma=new String(",");
int tipocelda;
String valor=new String();
String valor_letra=new String();
//Leer la primera fila del fichero xls que son los atributos y escribirlas en el fichero csv
//try
//{
public void GenerarFicheroCSV (String nombreExcel){
//FileWriter EscribirSalida=null;
try{
File ficheroSalida= new File ("d:/Programillas Java/salida.csv");
FileWriter EscribirSalida= new FileWriter (ficheroSalida);
System.out.println("exito en la creacion del fichero csv");
POIFSFileSystem ficheroEntrada = new POIFSFileSystem (new FileInputStream ("d:/Programillas Java/PRUEBA.xls"));
System.out.println("apertura e inicializacion de la hoja de calculo y libro con exito");
HSSFWorkbook librotrabajo2 = new HSSFWorkbook (ficheroEntrada);
HSSFSheet hojaleer = librotrabajo2.getSheet("Hoja1");
int pruebalineas = hojaleer.getFirstRowNum();
System.out.println("primera linea ocupada "+pruebalineas);
int prueba2=hojaleer.getLastRowNum();
System.out.println("ultima linea ocupada "+prueba2);
filastotales=hojaleer.getPhysicalNumberOfRows();
System.out.println("numero de filas totales del fichero excel son: "+filastotales);
//lineaAtributos = hojaleer.getFirstRowNum();
for (int i=0;i<filastotales;i++){//para cada fila del fichero excel hacer
for(int j=0;j<=variablestotales;j++){//para cada columna del fichero hacer
HSSFRow filatoca= hojaleer.getRow(i);
HSSFCell celdaLeer = filatoca.getCell((short)j);
try{
tipocelda=celdaLeer.getCellType();
System.out.println("exito en la lectura del tipo de la celda, que es: "+tipocelda);
}catch (Exception e){
System.out.println("Error al leer el tipo de la celda");
}
switch (tipocelda){
case 0://tipo entero convertirlo a string
valor_numerico=celdaLeer.getNumericCellValue();
valor=String.valueOf(valor_numerico);
System.out.println("exito conversion de tipos entero string");
break;
case 1:
valor_letra=celdaLeer.getStringCellValue();
valor=valor_letra;
System.out.println("exito lectura de celda de valor string");
break;
}
//escribir los resultados en el fichero csv.
//ficheroSalida.write();
//ficheroSalida.write((String)delimitadorcomas);
if(j==variablestotales) {
System.out.println("j==variablestotales");
if(tipocelda==0)
//Escribir la celda en el fichero, no escribir el delimitador y pasar a la fila siguiente
try {
EscribirSalida.write(valor);
//EscribirSalida.flush();
System.out.println("exito en la escritura del fichero del valor inicialmente entero");
} catch(Exception e){
System.out.println("error al escribir en el fichero el valor tipo 0");
}
if(tipocelda==1)
try {
EscribirSalida.write(valor_letra);
//EscribirSalida.flush();
System.out.println("exito en la segunda escritura");
} catch(Exception e){
System.out.println("error al escribir en el fichero el valor letra tipo 1");
}
}
else{
System.out.println("EL VALOR DE LA CELDA TIPO 0 ES: "+valor);
System.out.println("EL VALOR DE LA CELDA TIPO 1 ES: "+valor_letra);
//escribir la celda en el fichero, escribir el delimitador y seguir con la celda siguiente
if(tipocelda==0)
try{
EscribirSalida.write(valor);
System.out.println("escritura del limitador con exito:"+ delimitadorcoma + ":"+valor);
//EscribirSalida.flush();
//EscribirSalida.flush();
EscribirSalida.write(delimitadorcoma);
}catch(Exception e){
System.out.println("error al escribir valor tipo celda con el delimitador: " + e);
}
if (tipocelda==1)
try {
EscribirSalida.write(valor_letra);
//EscribirSalida.flush();
//EscribirSalida.write(delimitadorcoma);
//EscribirSalida.flush();
System.out.println("escritura del limitador tipo1 con exito");
}catch(Exception e){
System.out.println("error al escribir en el fichero el valor letra tipo 1 con delimtador de comas "+e.getMessage());
}
}
}//fin for columnas
}//fin for filas
if (EscribirSalida!=null)
EscribirSalida.close();
}catch(Exception e) {
System.out.println("error al cerrar el fichero de escritura");
}
}
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas