java 下载功能 另存为

本文提供了一个使用Java实现导出Excel文件的功能示例,包括前端按钮触发、后端处理逻辑及异常处理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上次写的java 跟js的下载功能 写的不清晰,有些需求可能还达不到,但是有热心的朋友的提供了,感谢 

java-Ms郑 童鞋。

思路 ,代码都更加完善的版本给我,我在这里整理了一下,以供大家查询

 

其实 导出功能,跟下载功能都可以用到 。上菜。

<a href="#" class="btn daochu" >导出</a>

 

 js   如果是下载 不需要传path

 function exportExcel(){

         $(".daochu").attr('href','${ctx}/assetBzd/zcBzd/exportExcel?str=+"${zcBzd.menuFlag}"');

 }

 

 

 @RequestMapping(value = "exportExcel")

public void exportExcel(HttpServletRequest request, HttpServletResponse response,Model model,

RedirectAttributes redirectAttributes,@RequestParam(value="str")String str){

String fileName = "报账单列表"+DateUtils.getDate("yyyyMMddHHmmss")+".xlsx";

String message=""; 

try {

fileName = new String(fileName.getBytes("GBK"), "iso8859-1");

response.reset();  

response.setHeader("Content-Disposition", "attachment;filename="  

               + fileName);// 指定下载的文件名  

response.setContentType("application/vnd.ms-excel");  

response.setHeader("Pragma", "no-cache");  

response.setHeader("Cache-Control", "no-cache");  

response.setDateHeader("Expires", 0);

 

ZcBzd zcBzd =new ZcBzd();

zcBzd.setBzdType("sbBzd");

zcBzd.setMenuFlag(str);

Page<ZcBzd> page = zcBzdService.findPage(new Page<ZcBzd>(request, response), zcBzd);

List<BzdConfigTable> bzdConfigTable = zcBzdService.getByClassName(zcBzd.getBzdType());

List<String> listColumn = getlistColumn(bzdConfigTable.get(0));

List<ZcBzd> listData = page.getList();

message=createExcelUtils.getBzdExcelNew(listColumn,listData,response);

System.out.println(message);

//message=createExcelUtils.getBzdExcel(listColumn,listData);

//

//addMessage(redirectAttributes, message);

//model.addAttribute("bzdConfigTable" , bzdConfigTable) ;

//model.addAttribute("page", page);

//return "modules/zcBzd/zcBzdList";

} catch (Exception e) {

addMessage(redirectAttributes, message);

}

//return "";

}

 

public static String getBzdExcelNew(List<String> listColumn,List<ZcBzd> listData,HttpServletResponse response){

FileOutputStream fout = null;

String message="";

HSSFCell cell = null;

try{

  // 第一步,创建一个webbook,对应一个Excel文件  

       HSSFWorkbook wb = new HSSFWorkbook();  

      // 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet  

       HSSFSheet sheet = wb.createSheet("学生表一");  

       // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制short  

       HSSFRow row = sheet.createRow((int) 0);  

       // 第四步,创建单元格,并设置值表头 设置表头居中  

       HSSFCellStyle style = wb.createCellStyle();  

       style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建一个居中格式  

 

       for (int j= 0; j< listColumn.size(); j++){ 

       cell = row.createCell((short) j);  

       cell.setCellValue(listColumn.get(j));  

       cell.setCellStyle(style); 

       }

       

//        cell = row.createCell((short) 0);  

//        cell.setCellValue("学号");  

//        cell.setCellStyle(style);  

//        cell = row.createCell((short) 1);  

//        cell.setCellValue("姓名");  

//        cell.setCellStyle(style);  

//        cell = row.createCell((short) 2);  

//        cell.setCellValue("年龄");  

//        cell.setCellStyle(style);  

//        cell = row.createCell((short) 3);  

//        cell.setCellValue("生日");  

//        cell.setCellStyle(style);  

 

       // 第五步,写入实体数据 实际应用中这些数据从数据库得到,  

//        List list = createExcelUtils.getStudent();  

     

       for (int i = 0; i < listData.size(); i++){  

           row = sheet.createRow((int) i + 1);  

           ZcBzd zcBzd = (ZcBzd) listData.get(i);  

           // 第四步,创建单元格,并设置值  

           row.createCell((short) 0).setCellValue(zcBzd.getFillPersonName().getName());//填写人姓名  

           row.createCell((short) 1).setCellValue(zcBzd.getEquipmentName());  

           row.createCell((short) 2).setCellValue((double) zcBzd.getAccoQuantity());  

//            cell = row.createCell((short) 3);  

//            cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(zcBzd.getCheAccDate()));

           row.createCell((short) 3).setCellValue((double) zcBzd.getAccoAmount());

           row.createCell((short) 4).setCellValue(zcBzd.getUseDepartmentName().getName()); //归属部门

           row.createCell((short) 5).setCellValue(zcBzd.getAssCustodian().getName());

           row.createCell((short) 6).setCellValue(new SimpleDateFormat("yyyy-mm-dd hh-mm-ss").format(zcBzd.getCheAccDate()));

           row.createCell((short) 7).setCellValue(zcBzd.getInvoiceNo());

           row.createCell((short) 8).setCellValue("1".equals(zcBzd.getWheDutyFree())?"是":"否");

           row.createCell((short) 9).setCellValue(zcBzd.getAccoNo());

           row.createCell((short) 10).setCellValue(new SimpleDateFormat("yyyy-mm-dd hh-mm-ss").format(zcBzd.getFillTime()));

        } 

        OutputStream output = response.getOutputStream();

        BufferedOutputStream bufferedOutPut = new BufferedOutputStream(output);

        bufferedOutPut.flush();  

        wb.write(bufferedOutPut);

        bufferedOutPut.close();

 } catch (Exception e){  

           e.printStackTrace();

           message="导出错误";

     }finally{

        if(fout != null){

       try {

fout.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

message="导出错误";

        }

     }

System.out.println("**************************导出完毕**********************");

return message;

}

### Java 实现文件另存为功能Java中实现文件的“另存为功能通常涉及两个主要部分:一是提供给用户选择保存位置和文件名的界面;二是执行实际的文件复制或转换操作。对于图形界面的选择,可以利用`JFileChooser`组件来创建一个标准的文件保存对话框[^4]。 下面是一个完整的例子,展示了如何通过Swing框架中的`JFileChooser`让用户指定新的存储路径,并完成文件的简单拷贝: #### 使用 JFileChooser 创建保存对话框并复制文件 ```java import javax.swing.*; import java.awt.event.ActionEvent; import java.io.*; public class SaveAsExample { private static void createAndShowGUI() { JFrame frame = new JFrame("Save As Example"); JButton saveButton = new JButton("Save File"); // 添加按钮点击事件监听器 saveButton.addActionListener((ActionEvent e) -> { try (FileInputStream fis = null; FileOutputStream fos = null;) { // 初始化打开文件输入流(这里假设有一个源文件) String sourceFilePath = "path/to/source/file.txt"; File originalFile = new File(sourceFilePath); if (!originalFile.exists()) { JOptionPane.showMessageDialog(null, "Source file does not exist."); return; } // 打开文件选择器窗口供用户选择目标地址 JFileChooser chooser = new JFileChooser(); int result = chooser.showSaveDialog(frame); // 如果用户选择了有效的保存位置,则继续处理 if (result == JFileChooser.APPROVE_OPTION) { File destFile = chooser.getSelectedFile(); // 防止覆盖已存在的同名文件 if (destFile.exists()) { int confirmResult = JOptionPane.showConfirmDialog( null, "The destination file already exists. Do you want to overwrite it?", "Warning", JOptionPane.YES_NO_CANCEL_OPTION); if(confirmResult != JOptionPane.YES_OPTION){ return; } } // 开始读取原文件数据准备写入新文件 fis = new FileInputStream(originalFile); fos = new FileOutputStream(destFile); byte[] buffer = new byte[8 * 1024]; int bytesRead; while ((bytesRead = fis.read(buffer)) != -1) { fos.write(buffer, 0, bytesRead); } JOptionPane.showMessageDialog(null, "File saved successfully!"); } else { System.out.println("No selection made."); } } catch (IOException ex) { ex.printStackTrace(); JOptionPane.showMessageDialog(null, "An error occurred during the operation."); } }); JPanel panel = new JPanel(); panel.add(saveButton); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); frame.setLocationRelativeTo(null); frame.getContentPane().add(panel); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(SaveAsExample::createAndShowGUI); } } ``` 这段代码首先定义了一个带有“保存文件”按钮的小型应用程序窗体。当用户点击该按钮时,会弹出一个文件保存对话框允许他们挑选想要保存的位置以及设定文件名称。一旦确认了这些信息之后,程序就会尝试从预设好的原始文件路径加载内容到选定的目标位置上进行保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值