0

我有一个结果集,我必须将结果集中的所有可用数据写入一个文本文件,并将其填充给用户以供下载。

我已经完成了以下代码以使用 poi 导出到 excel,与文本文件的操作方式相同。

if(exportTo.equals("excel"))
        {
            response.setContentType("application/vnd.ms-excel");
            response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".xls\"");
            try {
                HSSFWorkbook hwb = new HSSFWorkbook();
                HSSFSheet sheet = hwb.createSheet(reportName); 
                HSSFRow row = null;

                HSSFHeader header = sheet.getHeader();
                header.setCenter("POC");
                header.setLeft("POC");
                header.setRight(HSSFHeader.font("Stencil-Normal", "Italic") +
                                HSSFHeader.fontSize((short) 16) + reportName);

                //to add water mark
                /*HSSFPatriarch dp = sheet.createDrawingPatriarch();
                HSSFClientAnchor anchor = new HSSFClientAnchor
                    (0, 0, 1023, 255, (short) 2, 4, (short) 13, 26);
                HSSFTextbox txtbox = dp.createTextbox(anchor);
                HSSFRichTextString rtxt = new HSSFRichTextString("POC");
                HSSFFont draftFont = hwb.createFont();
                draftFont.setColor((short) 27);
                draftFont.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
                draftFont.setFontHeightInPoints((short) 192);
                draftFont.setFontName("Verdana");
                rtxt.applyFont(draftFont);
                txtbox.setString(rtxt);
                txtbox.setLineStyle(HSSFShape.LINESTYLE_NONE);
                txtbox.setNoFill(true);*/

                HSSFCellStyle style = hwb.createCellStyle();
                style.setBorderTop((short) 6); // double lines border
                style.setBorderBottom((short) 1); // single line border
                style.setFillBackgroundColor(HSSFColor.GREY_25_PERCENT.index);

                HSSFFont font = hwb.createFont();
                font.setBoldweight((short) 700);

                // Create Styles for sheet.
                HSSFCellStyle headerStyle = hwb.createCellStyle();
                headerStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
                headerStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                headerStyle.setFont(font);
                headerStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                headerStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                headerStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                headerStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                headerStyle.setAlignment((short) 2);

                // create Title for the sheet
                HSSFCellStyle titleStyle = hwb.createCellStyle();

                HSSFFont titleFont = hwb.createFont();
                titleFont.setFontName(HSSFFont.FONT_ARIAL);
                titleFont.setFontHeightInPoints((short) 15);
                titleFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
                titleFont.setColor(HSSFColor.BLUE.index);
                titleStyle.setFont(titleFont);
                titleStyle.setAlignment((short)2);

                row = sheet.createRow((short)1);
                HSSFCell secondCell = row.createCell((short) 0);
                secondCell.setCellValue(new HSSFRichTextString(reportName).toString());
                secondCell.setCellStyle(titleStyle);    
                sheet.addMergedRegion(new Region(1, (short)0, 1, (short)headerCount));

                int sno=0;
                HSSFRow rowhead = sheet.createRow((short)4);
                for (Iterator it = headerMap.keySet().iterator(); it.hasNext();) {
                    String headerName = (String) headerMap.get(it.next());
                    HSSFCell headerCell = rowhead.createCell((short)sno);
                    headerCell.setCellStyle(headerStyle);
                    headerCell.setCellValue(headerName);
                    sno++;
                }

                HSSFCellStyle rowStyle=hwb.createCellStyle();
                rowStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
                rowStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
                rowStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
                rowStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
                rowStyle.setAlignment((short) 2);

                row = custDAO.creadExcelTable(query, sheet, row,rowStyle);
                hwb.write(response.getOutputStream());
                response.flushBuffer();

            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }
public HSSFRow creadExcelTable(String query,HSSFSheet sheet,HSSFRow row,HSSFCellStyle rowStyle ){
        int numberOfColumns=0,sno=0,index=5,iterator=1;
        Connection connection = getConnection();
        if (connection != null) {
            try {
                PreparedStatement reportTablePS = connection.prepareStatement(query);
                ResultSet reportTable_rst = reportTablePS.executeQuery();
                ResultSetMetaData reportTable_rsmd = reportTable_rst.getMetaData();
                numberOfColumns = reportTable_rsmd.getColumnCount();
                int i =0;
                while (reportTable_rst.next()) {
                     row = sheet.createRow((short)index);
                     sheet.setColumnWidth((short)index, (short)100);

                    /* if(i == 0){
                         i = 1;
                         rowStyle.setFillForegroundColor(HSSFColor.BLUE_GREY.index);
                         rowStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                         System.out.println("BLUE_GREY");
                     }
                    else {
                        i = 0;
                        System.out.println("LEMON");
                        rowStyle.setFillForegroundColor(HSSFColor.LEMON_CHIFFON.index);
                        rowStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
                    }*/

                     HSSFCell serialCell = row.createCell((short)sno);
                     serialCell.setCellStyle(rowStyle);
                     serialCell.setCellValue(iterator);

                            for (int columnIterator = 1; columnIterator <= numberOfColumns; columnIterator++) {
                                 String column = reportTable_rst.getString(columnIterator);
                                 sheet.setColumnWidth((short)columnIterator, (short)3000);
                                 HSSFCell rowCell = row.createCell((short)columnIterator);
                                 rowCell.setCellStyle(rowStyle);
                                 rowCell.setCellValue(column);
                            }
                            index++;
                            iterator++; 
            }
            } catch (Exception ex) {
                ex.printStackTrace();
            }finally {
                try {
                    closeConnection(connection, null, null);
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        }
        return row;
    }

现在我已经完成了这个,真的不知道该怎么做

 if(exportTo.equals("text")){
            response.setContentType("text/plain");
            response.setHeader("Content-disposition", "attachment; filename=\"" + reportName + ".txt\"");
            try {

            } catch (Exception e) {
                // TODO: handle exception
            }

        }

这个用于在指定位置创建文件

Writer writer = null;

try {
    String text = "This is a text file";

    File file = new File("write.txt");
    writer = new BufferedWriter(new FileWriter(file));
    writer.write(text);
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
} finally {
    try {
        if (writer != null) {
            writer.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

但我想用对话框导出文件,请帮助我如何去做。

问候

4

1 回答 1

1

我想你没有得到一个对话框,因为你的浏览器可以自己处理文本文件。浏览器读取 http 响应的 MIME 类型(使用 设置response.setContentType("text/plain");) 大多数浏览器自己打开 html、图像和文本,并将其他文件类型(如音频、pdf 或 Office 文档)重定向到其他应用程序。因此,您可能需要调整浏览器设置。

于 2012-09-27T08:24:55.163 回答