我尝试将数组写入文件,但是我得到的不是我的数据,而是两个单元格;一个是 [Ljava.lang.String;@7b1ddcde
,另一个是 [Lorg.supercsv.cellprocessor.ift.CellProcessor;@658fb1f7
我不知道这到底是怎么回事正在发生,因为我的数组实际上是一组非常好的数据,并且当我将其打印到控制台时可以工作。
我的表格包含所有标题和必需的单元格,只是这些奇怪的错误占用了前两个单元格,并且没有写入其他数据。
我的 CellProcessor 方法只是充满了 newOptional(),
所以我不认为这是这里的问题。
这是整个方法。非常抱歉,我的代码很糟糕,是匆忙编写的。
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;
}
最佳答案
查看ICsvListWriter API ,在我看来,您正在获取方法 write(Object... columns)
,而不是 write(List<?> columns, CellProcessor[] processors)
.
您尝试调用的方法似乎需要列表作为第一个参数,而不是数组,因此首先将数组转换为列表,然后尝试写入它。类似的东西;
String[] splitArray = line.split("\\s+");
List list = Arrays.asList(splitArray);
System.out.println("Writing Array");
listWriter.write(list, processors);
关于java - 使用 Java 编写 CSV 会产生奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14489362/