2013-10-22 56 views
0

寫它,我使用OpenCsv API,現在我被困在一些problem.Here的我的代碼如何下載csv文件,而無需使用OpenCsv

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
      throws ServletException, IOException { 
     response.setContentType("text/html;charset=UTF-8"); 
     PrintWriter out = response.getWriter(); 

     try { 
      List<UserRegData> userRegDataList = new ArrayList<UserRegData>(); 
      HttpSession session = request.getSession(); 
      userRegDataList = (List<UserRegData>) session.getAttribute("referralData"); 
      List<String[]> dataToWrite = new ArrayList<String[]>(); 
      String csv = "E:\\carewave_backup\\csv\\UserReferral.csv"; 
      CSVWriter writer = new CSVWriter(new FileWriter(csv)); 

      for (UserRegData obj : userRegDataList) { 
       dataToWrite.add(new String[]{obj.getReferred_by_name(), obj.getInvitee_name(), obj.getInvitee_email(), obj.getInvitee_date(), obj.getIsInviteeRegistered(), obj.getDate_of_invitee_registered()}); 
      } 
      writer.writeAll(dataToWrite); 
      writer.close(); 
     } catch (Exception ex) { 
      ex.printStackTrace(); 
     } finally { 
      out.close(); 
     } 
    } 

這個servlet基本上是從會話檢索列表並將其寫入到CSV文件這個servlet是在用戶點擊下載csv按鈕後觸發的。現在我需要的是,瀏覽器應該給出一個下載對話框。是否有以csv格式下載它而不用先寫入文件?

+0

爲什麼你認爲你必須將它寫入服務器上的文件?將內容類型設置爲「text/csv」後,而不是'writer.writeAll'將行直接寫入響應。 –

回答

0

我假設您問的是如何直接將服務器上的輸出流式傳輸到客戶端,而不是先寫入服務器上的臨時文件。

您不需要先將數據寫入文件。

  1. 設置resonse內容類型到響應對象
  2. text/csv
  3. 呼叫getOutputStream()收件的dataToWrite內容作爲單獨的行輸出流

不需要磁盤文件。