Java删除CSV指定索引列后写入替换本地文件的实现方法
Java CSV删除指定列并写入本地实现方案
你现有代码仅完成了CSV逐行读取、打印索引15列内容的逻辑,要实现删除目标列、写入本地文件的需求,直接按如下方式调整即可:
- 核心逻辑说明:逐行读取CSV内容时,跳过索引为15的列,将剩余字段按原有顺序拼接为新行,再通过CSV写入组件将所有处理后的行输出到目标路径。
- 避坑提示:不要直接在读取过程中覆盖原文件,先输出到新文件路径,确认结果正确后再替换原文件,避免数据丢失。
可直接运行的完整代码
import com.opencsv.CSVReader; import com.opencsv.CSVWriter; import java.io.FileReader; import java.io.FileWriter; import java.util.ArrayList; import java.util.List; public class CsvHandleDemo { public static void main(String[] args) { // 替换为你的源CSV文件实际路径 String sourceFile = "/your/local/path/source.csv"; // 替换为处理后文件的输出路径 String targetFile = "/your/local/path/processed.csv"; // 固定要删除的列索引 final int DELETE_COL = 15; // 用try-with-resources语法自动管理流,无需手动关闭,避免文件句柄泄漏 try ( CSVReader csvReader = new CSVReader(new FileReader(sourceFile)); CSVWriter csvWriter = new CSVWriter(new FileWriter(targetFile)) ) { String[] currentLine; while ((currentLine = csvReader.readNext()) != null) { // 处理长度不足的异常行,直接写入避免索引越界报错 if (currentLine.length <= DELETE_COL) { csvWriter.writeNext(currentLine); continue; } // 组装删除目标列后的新行 List<String> processedLine = new ArrayList<>(); for (int i = 0; i < currentLine.length; i++) { if (i != DELETE_COL) { processedLine.add(currentLine[i]); } } // 写入处理后的行 csvWriter.writeNext(processedLine.toArray(new String[0])); } } catch (Exception e) { e.printStackTrace(); } } }
常见问题处理
- 乱码问题:如果CSV文件是GBK、UTF-8 BOM等非默认编码,初始化FileReader、FileWriter时指定对应编码即可,例如JDK11+可以用
new FileReader(sourceFile, Charset.forName("GBK"))指定GBK编码读取。- 依赖问题:如果项目中还没引入OpenCSV的CSVWriter类,先把对应依赖包引入项目,确保读写类都能正常加载。
- 格式问题:默认CSVWriter用逗号做字段分隔符、双引号包裹特殊字段,符合通用CSV规范,如果你的文件用其他分隔符,初始化CSVWriter时传入自定义分隔符参数即可。
内容的提问来源于stack exchange,提问作者Chgn_Y
相关产品推荐
相关产品推荐

