java读取csv文件内容(逗号分隔、回车换行文本)

本文介绍了如何使用Java处理CSV文件,特别是包含逗号和双引号的复杂字段。通过正则表达式解析每一行,确保正确处理字段内的逗号,并将数据插入到数据库中。
摘要由CSDN通过智能技术生成

最近在做项目时需要每日更新大小额支持的银行列表信息,该文件从核心下载,并使用java项目解析放到数据库中,该文件是文本文件,一行为一条记录,记录中以逗号分隔字段,字段以双引号包裹,起初以这种规则自己写一个小程序也能用,于是写了几句代码,确实能运行解析出大部分内容,但有些特殊情况是没有解析出来的,例如:双引号包裹的的字段内容里面也有逗号,但这个逗号并不是字段之间的分隔符,而是字段内容的一部分。起初并不知道这其实是一种标准的csv格式,虽然曲折但是整好了记录下



package com.schedule;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.sql.DataSource;

import org.apache.commons.lang3.time.DateUtils;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;

import com.ynet.ifp.eams.core.util.FtpUtils;
import com.ynet.ifp.eams.utils.file.UncompressFileGZIP;
import org.springframework.stereotype.Component;

/**
 * 更新大小额联行号信息 暂定每天晚上11点执行
 */
@Component("firstUpdatePxdzfInfoSchedule")
public class FirstUpdatePxdzfInfoScheduleImpl extends EamsScheduledService {
 private static Logger log = Logger.getLogger(FirstUpdatePxdzfInfoScheduleImpl.class);
 
   @Autowired
   private com.ynet.ifp.core.utils.TxUtils txUtils;
   @Autowired
   private DataSource dataSource;
   @Value("${hx.bank.host}")
   private String host;
   @Value("${hx.bank.port}")
   private int port;
   @Value("${hx.bank.path}

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 .NET Framework 中的 System.IO 命名空间中的 StreamReader 类和 StreamWriter 类来读取和写入 CSV 文件。 首先,使用 StreamReader 读取 CSV 文件中的数据。在读取时可以使用 ReadLine 方法来逐行读取,并使用 Split 方法将每行数据拆分成字符串数组。然后可以使用索引访问每一列的数据。 然后,使用 StreamWriter 创建新的 CSV 文件并写入第二列的数据。在写入时可以使用 WriteLine 方法将数据写入新文件。 以下是示例代码: ```vb.net '读取数据 Using reader As New StreamReader("data.csv") Dim line As String While Not reader.EndOfStream line = reader.ReadLine() Dim values() As String = line.Split(","c) '写入数据 Using writer As New StreamWriter("newdata.csv", True) writer.WriteLine(values(1)) End Using End While End Using ``` 注意: - 这里假定每行都已使用逗号分隔,如果csv文件分隔符不是逗号可能需要改变Split的参数 - 使用Using语句确保文件在使用后能正常关闭,如果是vb6 使用try finally ### 回答2: 在VB.Net中读取CSV数据并写入另一个CSV文件的实现如下: ```vb Imports System.IO Module Module1 Sub Main() Dim inputFile As String = "input.csv" ' 输入CSV文件路径 Dim outputFile As String = "output.csv" ' 输出CSV文件路径 Dim delimiter As Char = "," ' CSV文件分隔符 ' 读取CSV文件数据 Dim csvData As New List(Of List(Of String))() Using reader As New StreamReader(inputFile) While Not reader.EndOfStream Dim line As String = reader.ReadLine() Dim values As String() = line.Split(delimiter) Dim row As New List(Of String)(values) csvData.Add(row) End While End Using ' 获取第二列数据 Dim secondColumnData As New List(Of String)() For Each row In csvData If row.Count >= 2 Then ' 确保行中至少有2列数据 secondColumnData.Add(row(1)) End If Next ' 写入第二列数据到新的CSV文件 Using writer As New StreamWriter(outputFile) For Each value In secondColumnData writer.WriteLine(value) Next End Using Console.WriteLine("第二列数据已写入到新的CSV文件。") Console.ReadLine() End Sub End Module ``` 请注意将`input.csv`替为实际的输入CSV文件路径,将`output.csv`替为实际的输出CSV文件路径。此代码假设CSV文件中的数据没有多余的空格或特殊字符,并且没有缺少列的行。如果有特殊要求或额外的数据处理需求,可能需要对代码进行修改。 ### 回答3: 在VB.NET中读取CSV数据并将第二列数据写入另一个CSV文件的例子如下: ```vb.net Imports System.IO Module Module1 Sub Main() Dim sourceFilePath As String = "source.csv" Dim targetFilePath As String = "target.csv" ' 读取文件数据 Dim sourceData As New List(Of String()) Using reader As New StreamReader(sourceFilePath) While Not reader.EndOfStream Dim line As String = reader.ReadLine() Dim values As String() = line.Split(","c) sourceData.Add(values) End While End Using ' 写入目标文件 Using writer As New StreamWriter(targetFilePath) For Each values As String() In sourceData If values.Length >= 2 Then writer.WriteLine(values(1)) ' 将第二列数据写入目标文件 End If Next End Using Console.WriteLine("数据已写入目标文件。") Console.ReadLine() End Sub End Module ``` 在代码中,首先定义了源文件路径和目标文件路径。然后,使用`StreamReader`读取文件中的数据,并将每一行拆分成字符串数组。接着,使用`StreamWriter`将第二列的数据写入目标文件。最后,输出提示信息并等待用户按下回车键。 需要注意的是,CSV文件的列是基于逗号分隔的。在代码中,我们使用逗号分隔符`(","c)`来将每一行的数据拆分成字符串数组。如果CSV文件分隔符不是逗号,你需要相应地更改此代码中的分隔符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值