java写入csv,解决数据错位问题

  1.  java写入csv,可以使用下面的方法

public String uploadCsv(JSONObject map,String Id, JSONArray idRecordList, String date,String[] tag) {
      //开启日志,不要可以省略

      LOGGER.info("目标:" + Id + ",共需上传:" + 1 + "个文件。");
      String strategy_id = map.getString("strategy_id");
      //创建本地目录
      File file = FileUtil.mkdir(System.getProperty("user.dir") + File.separator + "data" + File.separator + date);
       //创建目录下的临时文件
      File tmp = new File(file.getPath() + File.separator   +Id + ".csv");
      //设置编码
      CsvWriter writer = CsvUtil.getWriter(tmp, CharsetUtil.CHARSET_UTF_8);
      try {
         //写表头字段名
         String[] headers ={
              
         };

         writer.write(headers);
        //循环数据
         for (int i = 0; i < idRecordList.size(); i++) {
            JSONObject record = idRecordList.getJSONObject(i);
            String[] rs = new String[headers.length];

            for (int j = 0; j < headers.length; j++) {
               String key = headers[j];
         
            }
            writer.write(rs);
         }
           //这里文件就已经在本地生成了
      } catch (Exception e) {
          e.printStackTrace();
       
      } finally {
         writer.flush();
         writer.close();

      }
   }

2.调用上面方法导出

但在导出时,有时会遇到一个问题,这个是我踩的比较大的坑,就是bbb的值出现在了name的值后面,导致后面的数据错位,如下图所示:

       debugger发现每个字段都获取到对应的值了,但是写入的时候出现了这种情况,我把bbb从第三列设置在第四列,发现第三列的值依旧写入在了第二列的单元格里,因此问题不是后面的字段,而是第二列的字段,最后我得出了两种解决办法:

  •  将第二列换到导出的最后一列,就是写headers时写在最后一个,这样就不会有数据添加在它的单元格里,这个就是不要求导出列的顺序的情况下可采用
  • 第二个就是在获取第二列的值时,记得添加"\n"换行符,这种方式不会影响导出的列顺序
for (int j = 0; j < headers.length; j++) {
					String key = headers[j];
					if (key.equals("id")) {
						rs[j] = record.getString(key);
					} else if (key.equals("name")) {
						rs[j] = record.getString(key)+"\n";
}

 

问题就成功解决啦 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java读取CSV文件数据写入MySQL可以通过以下步骤完成: 1. 首先,你需要使用Java中的FileReader类来读取CSV文件。可以使用CSVReader或者BufferedReader来逐行读取CSV文件的内容。 2. 在读取CSV文件的同时,你可以使用StringTokenizer或者split方法将每一行数据拆分成字段,以便后续写入到MySQL中。 3. 接下来,你需要使用Java中的JDBC(Java Database Connectivity)来连接MySQL数据库。在连接数据库之前,你需要下载并添加数据库驱动程序(JDBC驱动)到你的Java项目中。 4. 一旦连接到MySQL数据库,你可以使用PreparedStatement准备SQL语句,并使用setString或者setInt等方法设置参数的值,将数据插入到MySQL数据库中。 5. 最后,你可以通过执行PreparedStatement的executeUpdate方法来执行SQL插入语句,并将CSV文件中的数据写入到MySQL数据库表中。 以下是一个简单的示例代码,用于读取CSV文件并将数据写入到MySQL数据库: import java.io.BufferedReader; import java.io.FileReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class CSVtoMySQLExample { public static void main(String[] args) { String csvFilePath = "path_to_csv_file.csv"; String jdbcURL = "jdbc:mysql://localhost:3306/db_name"; String username = "your_username"; String password = "your_password"; try (Connection connection = DriverManager.getConnection(jdbcURL, username, password); BufferedReader br = new BufferedReader(new FileReader(csvFilePath))) { String line; while ((line = br.readLine()) != null) { String[] data = line.split(","); String sql = "INSERT INTO table_name (column1, column2, column3) VALUES (?, ?, ?)"; PreparedStatement statement = connection.prepareStatement(sql); statement.setString(1, data[0]); statement.setString(2, data[1]); statement.setString(3, data[2]); statement.executeUpdate(); } System.out.println("Data imported successfully!"); } catch (Exception e) { e.printStackTrace(); } } } 请注意,以上代码仅作为示例,你需要根据你的实际情况修改数据库连接信息、CSV文件路径以及插入数据的SQL语句。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值