我不是在问什么是NullPointerException。我问是否有人知道,在OpenCSV的特定情况下,如果可以同时创建两个读者。
我正在尝试制作一个比较不同CSV文件上两列的程序。
所以,我所做的是打开两个读者,(类别和产品),然后比较它们并做一些事情。
因此,程序总结是:初始化所有内容,创建对象。然后我有两个循环(我需要将每个产品与所有类别进行比较)。 第一个循环完美运行,已经过测试。 但是当程序尝试开始读取第二个文件时,它会返回NullPointerException。
我正在使用的库是OpenCSV。他们更新了4.0v,我不知道是否可以同时打开两个读卡器。或者也许我错过了什么。
以下是代码:
public class Traductor_CSV {
///////////////////////////////////////////////////////// VARIABLES /////////////////////////////////////////////////////
private final char SEPARADOR = ';';
private final char COMILLAS = '"';
private String[] nombres;
File CSVCat;
File CSVProd;
////////////////////////////////////////////////////// CONSTRUCTOR & START ///////////////////////////////////////////////////////
Traductor_CSV(String Path1, String Path2) {
CSVCat = new File(Path1);
CSVProd = new File(Path2);
}
/**
* Estaría bien que recibiese por parámetro también los números de las columnas a comparar. Además, este programa se puede
* ampliar con una base de datos para conseguir que se haga solo también el traductor y no el comparador.
*/
public void start () {
//Do Stuff º
LeerCSV(CSVCat, CSVProd);
}
///////////////////////////////////////////// MÉTODOS //////////////////////////////////////////////////////////////
/**
* Este método lee los CSV que se le pasan por parámetro. Además, guarda dentro del array de Strings
* "nombres" los nombres de las categorías que van llegando.
* @param CSVCat
* @param CSVProd
*/
public void LeerCSV(File CSVCat, File CSVProd){
//Creo un objeto de la clase FileReader que me hace falta para los CSVReader
CSVReader CatReader = null;
CSVReader ProdReader = null;
CSVParser CatParser;
CSVParser ProdParser;
String ruta = "C:\\Users\\ADMINISTRACION2\\Desktop\\Dropshipping\\Feeds de datos\\BigBuy CSV\\Productos_copia.csv";
File CSV_copia = new File(ruta);
//Vamos a intentar abrirlos y operar con ellos
try {
//Se crea una especie de "constructor" para crear los lectores de archivos.
//para ello, antes se le pasan todos los atributos que queramos
CatParser =
new CSVParserBuilder()
.withSeparator(SEPARADOR)
.withIgnoreQuotations(true)
.build();
CatReader =
new CSVReaderBuilder(new FileReader(CSVCat))
.withSkipLines(1)
.withCSVParser(CatParser)
.build();
ProdParser =
new CSVParserBuilder()
.withSeparator(SEPARADOR)
.withIgnoreQuotations(true)
.build();
ProdReader =
new CSVReaderBuilder(new FileReader(CSVProd))
.withSkipLines(1)
.withCSVParser(ProdParser)
.build();
//Definimos el array de Strings de la línea leída
String [] lineaCat;
String [] lineaProd = null;
int i=0;
try{
//Lee las líneas del CSV de PRODUCTOS primero y las pone en lineaProd []
while ((lineaProd = ProdReader.readNext())!= null){
//Creo un array de strings para guardar las categorías separadas por comas
// después, meto cada una en uno de los huecos del array y los imprimo. Hasta aquí todo ok.
// 17/08/2017
String [] categorias_split = null;
categorias_split = lineaProd[3].split(",");
// for (int j=0; j<categorias_split.length; j++){
//
// System.out.println(categorias_split[j] + " "); }
//
// System.out.println(lineaProd[3].toString() + "\n");
//Lee las líneas del CSV de CATEGORIAS cada vez que se lee una nueva de PRODUCTOS y lo pone en lineaCat[]
while ((lineaCat = CatReader.readNext())!= null) {
//Cada vez que lee una nueva línea, meto el nombre en su sitio
nombres [i] = lineaCat[2];
i++;
System.out.println (lineaCat[1]);
//Comparo cada columna con su correspondiente
// if(CompararColumnas (categorias_split, lineaCat[0])) {
// //Si son iguales, se copia
//
//
// copiarEnArchivo(CSV_copia ,nombres, lineaCat[0]);
// }
}
//Cierro el lector y creo otro para que me vuelva a entrar en el bucle en cada iteración.
CatReader.close();
CatReader =
new CSVReaderBuilder(new FileReader(CSVCat))
.withSkipLines(1)
.withCSVParser(CatParser)
.build();
}
} catch (IOException ex) {
Logger.getLogger(Traductor_CSV.class.getName()).log(Level.SEVERE, null, ex);
}
} catch (FileNotFoundException ex) {
Logger.getLogger(Traductor_CSV.class.getName()).log(Level.SEVERE, null, ex);
} finally {
}
try {
//En cualquier caso, lo cerramos al final.
CatReader.close();
ProdReader.close();
} catch (IOException ex) {
Logger.getLogger(Traductor_CSV.class.getName()).log(Level.SEVERE, null, ex);
}
}
NullPointerException就是这个:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at traductor_bigb.Traductor_CSV.LeerCSV(Traductor_CSV.java:144)
at traductor_bigb.Traductor_CSV.start(Traductor_CSV.java:57)
我希望它有所帮助。谢谢大家。