使用对话框将结果集导出到 java 中的文本文件

Posted

技术标签:

【中文标题】使用对话框将结果集导出到 java 中的文本文件【英文标题】:export resultset to a text file in java with dialog 【发布时间】:2012-09-27 05:37:40 【问题描述】:

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

我已经完成了以下代码以使用 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();
    

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

问候

【问题讨论】:

“带对话框导出文件”是什么意思,它与 Excel 导出有何不同? 我从数据库中获取数据并使用 poi 写入并导出它,当用户单击导出到 excel 时,将打开保存/打开对话框与文件。我想对文本做同样的事情文件也是,我的问题是如何将数据写入流并将其设置为导出 将内容类型设置为text/plain。您了解“导出到 excel”代码的工作原理吗? 是的,我明白了,也设置了content-type to text/plain,但我不知道如何将数据设置为输出流 在 excel 部分中,您执行 response.getOutputStream()。做同样的事情并将数据写入输出流。 【参考方案1】:

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

【讨论】:

以上是关于使用对话框将结果集导出到 java 中的文本文件的主要内容,如果未能解决你的问题,请参考以下文章

如何将 mybatis 选择查询的巨大结果集导出到 csv?

查找哈希集中每个单词在文本文档中出现的次数

将 Delphi BDE Paradox *.db 查询结果导出到文本文件?

如何将 SQL 结果生成到 Excel 工作表 (Oracle)

springMVC怎么把结果集写入Excel并导出

jar配置文件怎么打包到外面eclipse