使用Java编写CSV会产生奇怪的错误
我尝试将数组写入一个文件,但得到的不是数据,而是两个单元格;一个是使用Java编写CSV会产生奇怪的错误,java,arrays,string,supercsv,Java,Arrays,String,Supercsv,我尝试将数组写入一个文件,但得到的不是数据,而是两个单元格;一个是[Ljava.lang.String;@7B1DDCDDE,另一个是[Lorg.SUPERSV.cellprocessor.ift.cellprocessor;@658fb1f7,我不知道这到底是怎么回事,因为我的数组实际上是一组非常好的数据,当我将它打印到控制台上时,它就会工作 我的表有所有的标题和必需的单元格,只是这些奇怪的错误占据了前两个单元格,没有写入其他数据 我的CellProcessor方法充满了new Optiona
[Ljava.lang.String;@7B1DDCDDE
,另一个是[Lorg.SUPERSV.cellprocessor.ift.cellprocessor;@658fb1f7
,我不知道这到底是怎么回事,因为我的数组实际上是一组非常好的数据,当我将它打印到控制台上时,它就会工作
我的表有所有的标题和必需的单元格,只是这些奇怪的错误占据了前两个单元格,没有写入其他数据
我的CellProcessor方法充满了new Optional(),
,所以我认为这不是问题所在。
这是整个方法。我很抱歉,我的代码很糟糕,它是匆忙制作的
static String[] writeWithCsvListWriter(String filename) throws Exception {
ICsvListWriter listWriter = null;
try {
listWriter = new CsvListWriter(new FileWriter(Main.filename + ".csv"),
CsvPreference.STANDARD_PREFERENCE);
final CellProcessor[] processors = getProcessors();
final String[] header = new String[] { "Year", "mm", "Max Temp", "Min Temp",
"af days", "Rain", "Sun" };
listWriter.writeHeader(header);
FileReader fileReader = new FileReader(filename);
BufferedReader bufferedReader = new BufferedReader(fileReader);
List<String> lines = new ArrayList<String>();
String line = null;
int i = 0;
while ((line = bufferedReader.readLine()) != null) {
if(line.startsWith(" 2010")){
try {
String[] splitArray = line.split("\\s+");
System.out.println("Writing Array");
listWriter.write(splitArray, processors);
} catch (PatternSyntaxException ex) {
}
}
i++;
}
bufferedReader.close();
} finally {
if( listWriter != null ) {
listWriter.close();
}
}
return null;
}
静态字符串[]writeWithCsvListWriter(字符串文件名)引发异常{
ICsvListWriter listWriter=null;
试一试{
listWriter=新的CsvListWriter(新的FileWriter(Main.filename+“.csv”),
CSVP(参考。标准优先);
最终CellProcessor[]处理器=getProcessors();
最终字符串[]头=新字符串[]{“年”、“毫米”、“最高温度”、“最低温度”,
“af天”、“雨”、“太阳”};
listWriter.writeHeader(标题);
FileReader FileReader=新的FileReader(文件名);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
列表行=新的ArrayList();
字符串行=null;
int i=0;
而((line=bufferedReader.readLine())!=null){
if(第行起始日期(“2010”)){
试一试{
String[]splitArray=line.split(\\s+);
System.out.println(“写入数组”);
写入(拆分数组、处理器);
}捕获(模式语法异常){
}
}
i++;
}
bufferedReader.close();
}最后{
如果(listWriter!=null){
listWriter.close();
}
}
返回null;
}
查看,在我看来,您得到的是方法写入(对象…列)
,而不是写入(列表列,CellProcessor[]处理器)
您试图调用的方法似乎希望列表作为第一个参数,而不是数组,因此请先将数组转换为列表,然后尝试编写它
String[] splitArray = line.split("\\s+");
List list = Arrays.asList(splitArray);
System.out.println("Writing Array");
listWriter.write(list, processors);
显示您的代码。您将获得数组的默认
toString
。是的,我如何阻止它这样做?顺便说一句,我建议不要默默地接受异常。