【问题标题】:How to replace a CSV file after removing a column in Java如何在删除 Java 中的列后替换 CSV 文件
【发布时间】:2022-12-07 04:23:37
【问题描述】:

我是 Java 的新手。我成功地能够从我的本地文件位置读取我的 CSV 文件,并且能够确定需要根据我的要求删除哪一列。但是,我无法删除所需的列并将文件写入我的本地文件夹。有没有办法解决这个问题?我使用了以下代码:

    CSVReader reader = new CSVReader(new FileReader(fileName));
    String [] nextLine;
    while ((nextLine = reader.readNext()) != null) {
        System.out.println(nextLine[15]);
    }

我想做的就是删除索引为 15 的列,并将文件作为 CSV 文件写入我的本地文件夹。

【问题讨论】:

    标签: java java-11 opencsv


    【解决方案1】:

    我假设您正在使用 OpenCSV 库。

    为了使您的代码正常工作,您必须解决 2 个问题:

    • 您需要编写器来将修改后的 CSV 写入其中。 OpenCSV 为此目的提供了一个 CSVWriter 类。
    • 您需要将您的行(当前是一个字符串数组)转换为一个列表以便能够删除一个元素,然后将其转换回一个数组以匹配 CSVWriter.writeNext 方法所期望的内容。

    这是执行此操作的一些代码:

    CSVReader reader = new CSVReader(new FileReader(fileName));
    CSVWriter writer = new CSVWriter(new FileWriter(outFileName));
    String[] origLine;
    while ((origLine = reader.readNext()) != null) {
        List<String> lineList = new ArrayList<>(Arrays.asList(origLine));
        lineList.remove(15);
        String[] newLine = lineList.toArray(new String[lineList.size()]);
        writer.writeNext(newLine, true);
    }
    writer.close();
    reader.close();
    

    一些补充说明:

    • 如果要在生产能力中使用,代码可能需要更多的错误处理等。
    • Java 中的列表索引从 0 开始,因此 remove[15] 实际上是从文件中删除第 16 列。
    • 代码将其输出写入一个单独的文件。尝试对输入和输出使用相同的文件名不管用.

    【讨论】:

    • "Trying to use the same file name for input and output will not work." 如果输出目标在不同的目录中,它会不起作用吗?
    • @DevilsHnd C:oneile.csvC: woile.csv 的文件名不同
    • 不,文件名 (file.csv) 完全相同。这是小路(C: wo ) 到那个不同的文件。
    猜你喜欢
    • 2022-07-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-21
    • 2011-11-27
    • 2010-11-12
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    相关资源
    最近更新 更多