Как изменить разделитель по умолчанию при загрузке значений в CSV-файл

Мое требование - записать значения из БД в файл.csv и отправить их по электронной почте. с помощью приведенного ниже кода извлекаются значения из БД и методом createFile(testFile) создается файл, который сохраняется в расположении сервера, а затем отправляется по электронной почте.

// Пример входных данных:
SRT678, Текстиль STS Secure Limited, OMD, Первый, Последний

Проблема в том, что SRT678 идет в столбец 1, Textile STS Secure Limited - столбец 2, OMD - столбец 3, но мне нужно "Textile STS Secure Limited, OMD" в столбец 2. Я не установил какой-либо разделитель как "," но я считаю, что по умолчанию "," принимается как разделитель.

Excel использует системный региональный параметр - разделитель списка, чтобы определить, какой разделитель по умолчанию использовать. Есть ли способ внести изменения в коде? Как я могу пропустить "," здесь Текстиль 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 ;
       }

Любая ваша помощь приветствуется! Спасибо!

1 ответ

Решение

Ваш файл разделен запятой. Поэтому всякий раз, когда он видит запятую, он рассматривает ее как новую запись в столбце.

Чтобы пропустить это, мы добавляем запись в двойных кавычках ("a, b, c").

Здесь a, b, c теперь находятся в одном столбце.

Чтобы достичь этого, мы используем .contains() метод и проверьте, есть ли в нем запятая.

String x = rs.getString("emid");
if(x.contains("\""))
  x = x.replace("\"", "\"\""); 
if(x.contains(",")) 
   x = "\"" + x + "\"";
Другие вопросы по тегам