Как изменить разделитель по умолчанию при загрузке значений в 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 + "\"";