当前位置: 首页 > 知识库问答 >
问题:

如何使用OpenCSV在同一个CSV文件上写入列,即使该文件是空的?

宗政英才
2023-03-14

我必须编写一个代码,该代码必须能够将列(数组字符串[]的值)和该列的头写入CSV文件。在这两种情况下,当列不存在时,以及当已经有一个名为输入值文件的文件时,它必须将列写入到一个output.csv文件中。我当然想在同一个文件上读写。代码如下:

public void afegir_columna_csv(String file, String header, String[] contingut) {
    try {
        FileWriter filewriter = new FileWriter(file, true);
        CSVWriter csvWriter = new CSVWriter(filewriter);
        FileReader filereader = new FileReader(file);
        CSVReader csvReader = new CSVReader(filereader);
        String head = header;
        String[] values = contingut;
        String[] entries = null;
        //Adding the header part:
        String[] H = csvReader.readNext();
        ArrayList listH = new ArrayList(Arrays.asList(H));
        listH.add(head);
        csvWriter.writeNext((String[]) listH.toArray());
        Añadimos los valores:
        int i=0;
        while((entries = csvReader.readNext()) != null) {
            ArrayList list = new ArrayList(Arrays.asList(entries));
            list.add(values[i]);
            csvWriter.writeNext((String[]) list.toArray());
        }
        csvWriter.close();
    }
    catch(Exception e) {
        e.printStackTrace();
    }
}
java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; ([Ljava.lang.Object; and [Ljava.lang.String; are in module java.base of loader 'bootstrap')

共有1个答案

车子平
2023-03-14

经过一段时间的分析,我找到了一个可行的解决方案。我不太确定它是否超级高效,但它做了它的工作。必须改变我从文件、头和内容中获取信息的方式,以只获取内容。代码如下:

public void add_column_csv(String[] contingut) {
    try {
        String filename = "output_preproces.csv";
        File _file = new File(filename);
        if(_file.createNewFile()) { //If the file doesn't exists, create and add the first column
            FileWriter filewriter = new FileWriter(filename, true);
            CSVWriter csvWriter = new CSVWriter(filewriter);
            List<String[]> data = new ArrayList<String[]>();
            int i=0;
            while(i < contingut.length) {
                data.add(new String[] {contingut[i]});
                i++;
            }
            csvWriter.writeAll(data);
            csvWriter.close();
        }
        else {  //If the file already exists, add a column to it:
            FileReader filereader = new FileReader(filename);
            CSVReader csvReader = new CSVReader(filereader);
            List<String[]> data = new ArrayList<String[]>();
            int i=0;
            while(i < contingut.length) {
                String[] nextLine;
                nextLine = csvReader.readNext();
                String[] aux = new String[nextLine.length + 1];
                aux[nextLine.length] = contingut[i];
                int j = 0;
                while(j < nextLine.length) {aux[j] = nextLine[j]; j++;};
                data.add(aux);
                i++;
            }
            csvReader.close();
            new FileWriter(filename, false).close();  //delete the old content of the file
            FileWriter filewriter = new FileWriter(filename, true);
            CSVWriter csvWriter = new CSVWriter(filewriter);
            csvWriter.writeAll(data);
            csvWriter.close();
        }

    } catch(Exception e) {
        e.printStackTrace();
    }
}

正如您所看到的,我必须将CSVReader与CSVWriter分开,并将所有数据保存在列表中。

 类似资料:
  • 本文向大家介绍Java中使用opencsv读写csv文件示例,包括了Java中使用opencsv读写csv文件示例的使用技巧和注意事项,需要的朋友参考一下 OpenCSV是一个简单的用于解析CSV文件的java类库,它封装了CSV格式文件的输出和读入,可以自动处理CSV格式中的特殊字符,最重要的是OpenCSV可以用于商业化(commercial-friendly)。具体的使用方法: 读CSV文件

  • 问题内容: 我正在尝试在同一CSV文件上进行读写: 我的csv文件是: 所以基本上,如果我的价值是我想用代替。上面的代码给了我空的CSV文件。 问题答案: 您应该使用其他输出文件名。即使您希望名称相同,也应该使用一些临时名称并最终重命名文件。 当您以“ w”(或“ wb”)模式打开文件时,此文件被“清除”-整个文件内容消失。的Python文档说: …“ w”仅用于写入(具有相同名称的现有文件将被删

  • 我已经考虑了很长一段时间了。我正在尝试从雅虎的股票API下载数据。当您使用 API 时,它会为您提供一个文件。我一直在看opencsv,这似乎很完美,除了我想避免下载和保存文件,如果可能的话。 根据示例,OpenCSV只能从中读取。根据Oracle关于的文档,文件需要是本地的。 是否可以使用 OpenCSV 从远程文件读取而不下载?

  • 我有一个长长的列表,列表的形式如下--- i、 列表中的值有不同的类型——float、int、string。如何将其写入csv文件,使输出的csv文件看起来像

  • 我使用supercsv CsvBeanWriter将值写入csv文件。 示例类: 我得到的结果是: 注意

  • 问题内容: 我有一个脚本(使用PhantomJS),用于测试加载网页需要多长时间。我要弄清楚的是如何写将页面加载到.csv文件所花费的时间结果。然后,如果我要重新运行测试,以将另一个结果添加到.csv文件中。 码: 问题答案: 您可以将fs模块与附加模式下的方法一起使用。 其中,文件路径是字符串,是包含CSV行的字符串。 就像是: