CSV编写使用Java产生奇怪的错误

时间:2013-01-23 21:05:00

标签: java arrays string supercsv

我尝试将我的数组写入文件,但不是我的数据,我只得到两个单元格;一个是[Ljava.lang.String;@7b1ddcde,另一个是[Lorg.supercsv.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;
}

1 个答案:

答案 0 :(得分:2)

查看ICsvListWriter API,我觉得你得到的方法是write(Object... columns),而不是write(List<?> columns, CellProcessor[] processors)

您尝试调用的方法似乎是期望List作为第一个参数,而不是数组,因此首先将数组转换为列表,然后尝试编写它。喜欢的东西;

String[] splitArray = line.split("\\s+");
List list = Arrays.asList(splitArray);
System.out.println("Writing Array");
listWriter.write(list, processors);