csv出力

action
 
   /** 遷移フラグ セッション格納キー名 */
    public static final String PROC_FLAG_CSV_DL =
        "SalePartNumStockConfirmTotalAction.csvdl"; 
    /** CSVファイル 文字エンコーディング */
    public static final String CSV_ENCODING = "Windows-31J";
   
    /** CSVファイル ダウンロードデフォルトファイル名 */
    public static final String CSV_FILENAME = "csvfileout.csv";     
   
 /**
  * プロテクション額連絡入力送信Action
  *
  * @param mapping
  *            ActionMapping object
  * @param form
  *            ActionForm object
  * @param request
  *            HttpServletRequest object
  * @param response
  *            HttpServletResponse object
  * @return ActionForward object
  * @throws Exception
  *             exception
  */
 public ActionForward exec(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
 
  //FORMの取得
     @SuppressWarnings("unused")
  ProconInputActionFrom proconInputFrom = (ProconInputActionFrom) form; 
   
   // ログイン情報の取得
   NetEquityContext context = getNetEquityContext(request);
   if (context == null) {
    return mapping.findForward("NotLogin");
   }
   
   long stockId;
   stockId = context.getStock().getStockId();        
   
   CsvOutService csvOutService =(CsvOutService) getBean("csvOutService");
   
            // CSV ダウンロード
            String csvData = csvOutService.getCsvDataList(stockId);
            OutputStream outStream = response.getOutputStream();
            byte[] byteArray = csvData.getBytes(CSV_ENCODING);
            setResponseHeader(response, CSV_FILENAME, byteArray.length);
            outStream.write(byteArray);
            outStream.flush();
            outStream.close();
           
            return null;  
 }
 
    private void setResponseHeader(
            HttpServletResponse response
           , String filename
           , int fileLength
    ) {
           response.setContentType("application/octet-stream");             
           response.setHeader("Content-Disposition", "p_w_upload; filename=" + filename);
           response.setHeader("Content-Type", "text/plain; charset=Shift_JIS");
           response.setDateHeader("Expires", 0);
           if (fileLength > 0) {
               response.setContentLength(fileLength);
           }
       }
}
 
方法
   /** DAOモジュール */
    private EntrySDao dao;
   
    /** DAOセッター */
    public void setEntrySDao(EntrySDao dao) {
        this.dao = dao;
    }
   
    /** 日付文字列フォーマット用Object */
    private SimpleDateFormat sdf;
   
    /** 株 CSVファイルヘッダ */
    private static final String[] ARY_CSV_HEADER_STOCK =
    {
            "シ団名"
           , "希望額"
           , "プロテクション額"
           , "ホールド"
           , "記名"
           , "登録時刻"
    };
   /**
     * コンストラクタ
     */
    public CsvOutServiceImpl() {
        sdf = new SimpleDateFormat("MM/dd HH:mm");
    }
   
    public String getCsvDataList(long stockId) {
     
     List < EntrySData > listRecord =dao.SelectList(stockId, null);
     
        StringBuffer sb = new StringBuffer();
        // ヘッダ行
        sb.append(getCsvHeader());
       
        // データ行
        for (Iterator < EntrySData > iter = listRecord.iterator(); iter.hasNext();) {
         EntrySData entrySData = iter.next();
            sb.append(getDataRow(entrySData));
        }
       
        return sb.toString();
    }
   
    /**
     * CSV データ行の作成
     *
     * @param row 行データ
     * @param kind 商品種類
     * @param mode 作成CSVの種類(販売分擔數入力-確認畫面用のCSV or 集計確認畫面用のCSV)
     * @return デリミタ挿入後の行データ
     * @throws IllegalStateException  商品種類が判別できない場合(株,REIT,CB 以外)
     */
    private String getDataRow(EntrySData entrySData) {
        StringBuffer sb = new StringBuffer();
       
            sb.append(QUOT+trimEx(entrySData.getName())+QUOT);
            sb.append(DELIMITER);
            sb.append(QUOT+entrySData.getProtectionHope()+QUOT);
            sb.append(DELIMITER);
            sb.append(QUOT+trimEx(entrySData.getProtectionAmount())+QUOT);
            sb.append(DELIMITER);
            sb.append(QUOT+trimEx(entrySData.getProtectionAmountHold())+QUOT);
            sb.append(DELIMITER);
            sb.append(QUOT+trimEx(entrySData.getUpdaterId())+QUOT);
            sb.append(DELIMITER);
            sb.append(QUOT+dateFormat(entrySData.getUpdateTime())+QUOT);
       
        sb.append(CRLF);
       
        return sb.toString();
    }
   
    private String trimEx(String s) {
        if (s == null) {
            return "";
        } else {
            return s.trim();
        }
    }
   
    private String dateFormat(Timestamp ts) {
        if (ts != null) {
            return sdf.format(ts);
        } else {
            return "";
        }
    }
   
    /**
     * CSV ヘッダ行の作成
     *
     * @param stockId 商品ID
     * @param kind 商品種類
     * @param mode 作成CSVの種類(販売分擔數入力-確認畫面用のCSV or 集計確認畫面用のCSV)
     * @return
     * @throws IllegalStateException 商品種類が判別できない場合(株,REIT,CB 以外)
     */
    private String getCsvHeader() throws IllegalStateException {
        StringBuffer sb = new StringBuffer();
        String[] headerArray = null;
       
        headerArray = ARY_CSV_HEADER_STOCK;
       
        // ヘッダ行生成 - 商品種類別
        for (int i = 0; i < headerArray.length; i++) {
            if (i != 0 ) {
                sb.append(DELIMITER);
            }
            sb.append(QUOT+headerArray[i]+QUOT);
        }    
       
        sb.append(CRLF);
       
        return sb.toString();
    }
   
   
    public List < EntrySData > entrySData(long stockId) {
        return dao.SelectList(stockId, null);
    }   
   
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章