Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java编写CSV会产生奇怪的错误_Java_Arrays_String_Supercsv - Fatal编程技术网

使用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
。是的,我如何阻止它这样做?顺便说一句,我建议不要默默地接受异常。