【问题标题】:How to modify default delimiter while loading values to csv file如何在将值加载到 csv 文件时修改默认分隔符
【发布时间】:2015-09-23 05:31:26
【问题描述】:

我的要求是将数据库中的值写入 .csv 文件并通过电子邮件发送相同的内容。使用下面的代码从 DB 中获取值,并通过 createFile(testFile) 方法创建文件并存储在服务器位置,然后通过电子邮件发送相同的值。

//样本输入数据:
SRT678,Textile STS Secure Limited, OMD,First,Last

问题是 SRT678 进入 column1,Textile STS Secure Limited - column2,OMD - column3 但我需要“Textile STS Secure Limited,OMD”到 column2。我没有将任何分隔符设置为“,”,但我相信默认情况下“,”被视为分隔符。

Excel 使用系统区域设置 - 列表分隔符来确定要使用的默认分隔符。有没有办法通过代码进行更改?我怎样才能在这里跳过“,” Textile STS Secure Limited, OMD 并使其进入 excel 中的同一列。

      public Object extractData(ResultSet rs) {
      List list1 = new ArrayList();
      TestFileInfo testFile = new TestFileInfo();
      String base_name="UsersInfo";
      String file_name=base_name + ".csv";
      testFile.setFileName(file_name);
        String header_row="empid,empName,firstName,lastName\r\n";
      list1.add(header_row);
        boolean valid = true;
        int total = 0;
        while (rs.next()) {
           if (valid) {
               total ++;
               String row = rs.getString("empid") 
                + "," + rs.getString("empName") 
                + "," + rs.getString("firstName")
                + "," + rs.getString("lastName")  
                + "\r\n" ;
            list1.add(row);
           }
           else {
                break;
               }
            }
          if (valid)
        {
            testFile.setTotalRecords(total);
            testFile.setRowList(list1);
        }
        else  
        {
            testFile = null;
        }
      return testFile;
     }

// createFile(testFile);

      static public void createFile( TestFileInfo testFile){
      List rowList = file.getRowList();
      File testFile = new File(location,file.getFileName()); 
     if (!testFile.exists()) {
          testFile.createNewFile();
    }
      FileWriter fstream = new FileWriter(testFile);
        BufferedWriter out = new BufferedWriter (fstream);
        for (Iterator row = rowList.iterator(); row.hasNext();) {
               out.write((String) row.next());
            }
            out.close();
            file.setCsvFile(testFile);
        return ;
       }

感谢您的任何帮助! 谢谢!

【问题讨论】:

  • String row = rs.getString("empid") + "," + rs.getString("empName") 这里的“,”有什么作用?
  • String x = rs.getString("emid"); if(x.contains(","))x = "\"" + x + "\"";
  • 太棒了!谢谢你。成功了

标签: java csv regional-settings list-separator


【解决方案1】:

您的文件以逗号分隔。因此,只要它看到一个逗号,它就会将其视为一个新的列条目。

要跳过此操作,我们将条目添加在双引号中(“a, b, c”)。

这里 a、b、c 现在在一个列中。

为此,我们使用.contains() 方法并检查其中是否包含逗号。

String x = rs.getString("emid");
if(x.contains("\""))
  x = x.replace("\"", "\"\""); 
if(x.contains(",")) 
   x = "\"" + x + "\"";

【讨论】:

  • 只是为了补充您的答案,您可能还想转义引号字符。如果 rs.getString() 返回一个包含“”的值,那么您应该将其替换为“”,否则生成的 CSV 将被破坏且无法解析。
  • @JeronimoBackes 谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-24
  • 2016-05-06
  • 2016-04-03
相关资源
最近更新 更多