2015-07-06 37 views
0

我的要求是將數據庫中的值寫入.csv文件併發送相同的電子郵件。用下面的代碼獲取來自DB的值並通過createFile(testFile)方法創建該文件並存儲在服務器位置,然後通過電子郵件發送相同的內容。如何在向csv文件加載值時修改默認分隔符

//取樣輸入數據:
SRT678,紡織STS安全有限公司,OMD,首先,最後

問題是SRT678去COLUMN1,紡織STS安全有限公司 - 列2,OMD - 欄3,但我需要「紡織品STS安全有限公司,OMD「第2欄。我沒有設置任何分隔符爲「,」但我相信默認情況下,「,」是作爲分隔符。

Excel使用系統區域設置 - 列表分隔符來確定要使用哪個默認分隔符。有什麼辦法通過代碼進行更改?我如何跳過「,」在這裏紡織STS安全有限公司,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 ; 
     } 

任何您的幫助表示讚賞! 謝謝!

+0

'字符串行= rs.getString( 「EMPID」) + 「」 + rs.getString( 「empName」)'這是什麼 「」 在這裏做什麼? –

+0

'String x = rs.getString(「emid」); if(x.contains(「,」))x =「\」「+ x +」\「」;' –

+0

太棒了!謝謝。它的工作 –

回答

1

您的文件是用逗號分隔的。所以只要它看到一個逗號,就認爲它是一個新的列條目。

爲了避免這樣做,我們將條目添加到雙引號(「a,b,c」)中。

這裏a,b,c現在在一個列中。

爲了達到這個目的,我們使用.contains()方法並檢查它是否有逗號。

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

只是爲了補充你的答案,你可能也想逃避引號字符。如果rs.getString()返回一個包含「」的值,那麼你應該用「」代替它,否則結果CSV將被破壞並且不可解析。 –

+0

@JeronimoBackes謝謝! –

相關問題