Java一次性下载多个文件

本文介绍了一个Java项目需求,需要一次性导出大量数据并按500条数据拆分为多个Excel文件。通过新增Excel工具类和业务代码实现该功能,包括数据预处理、按固定数量生成Excel文件,然后将文件夹压缩导出。在实现过程中遇到中文文件名乱码问题,可能由编码不一致引起,但未深入排查解决方案。
摘要由CSDN通过智能技术生成

最近项目遇到一个需求,需要一次性导出全部数据-,而且是按照500条数据一个文件。
话不多说,开始。

新增Excel工具类

可以直接复制


import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
//关于下面这两个包,可以直接用Java自带的,也可以导入
//我这里是导入的,可以进行一个编码的设置,不过我是没有设置成功,反而乱码
//建议里面的文件名什么的都用英文,不用担心乱码,哈哈
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class ExportExcel {
   

    // 显示的导出表的标题
    private String title;
    // 导出表的列名
    private String[] rowName;
    private List<Object[]> dataList = new ArrayList<Object[]>();

    public ExportExcel() {
   
    }

    // 构造函数,传入要导出的数据
    public ExportExcel(String title, String[] rowName, List<Object[]> dataList) {
   
        this.dataList = dataList;
        this.rowName = rowName;
        this.title = title;
    }

    // 导出数据
    public void export(OutputStream out) throws Exception {
   
        try {
   
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.createSheet(title);

            // 产生表格标题行
            HSSFRow rowm = sheet.createRow(0);
            HSSFCell cellTitle = rowm.createCell(0);


            //sheet样式定义【】
            HSSFCellStyle columnTopStyle = this.getColumnTopStyle(workbook);
            HSSFCellStyle style = this.getStyle(workbook);
            sheet.addMergedRegion(new CellRangeAddress(0, 1, 0, (rowName.length - 1)));
            cellTitle.setCellStyle(columnTopStyle);
            cellTitle.setCellValue(title);

            // 定义所需列数
            int columnNum = rowName.length;
            HSSFRow rowRowName = sheet.createRow(2);

            // 将列头设置到sheet的单元格中
            for (int n = 0; n < columnNum; n++) {
   
                HSSFCell cellRowName = rowRowName.createCell(n);
                cellRowName.setCellType(HSSFCell.CELL_TYPE_STRING);
                HSSFRichTextString text = new HSSFRichTextString(rowName[n]);
                cellRowName.setCellValue(text);
                cellRowName.setCellStyle(columnTopStyle);

            }
            // 将查询到的数据设置到sheet对应的单元格中
            for (int i = 0; i < dataList.size(); i++) {
   
                Object[] obj = dataList.get(i);// 遍历每个对象
                HSSFRow row = sheet.createRow(i + 3);// 创建所需的行数

                for (int j = 0; j < obj.length; j++) {
   
                    HSSFCell cell = null;
                    //这几行被注释掉的代码,是给表格第一列进行一个赋值起一个编号的效果,不过我认为没必要
//                    if (j == 0) {
   
//                        cell = row.createCell(j, HSSFCell.CELL_TYPE_NUMERIC);
//                        cell.setCellValue(i + 1);
//                    } else {
   
                        cell = row.createCell(j, HSSFCell.CELL_TYPE_STRING);
                     
### 回答1: 在 Java 中,可以使用 Scanner 类来读取整数。例如,你可以使用如下的代码来读取多个整数: ``` Scanner scanner = new Scanner(System.in); while (scanner.hasNextInt()) { int n = scanner.nextInt(); // 在这里处理整数 n } scanner.close(); ``` 在这段代码中,我们使用 Scanner 的 nextInt() 方法来读取整数,然后使用 hasNextInt() 方法来判断是否还有下一个整数可以读取。在读取完所有的整数后,我们需要调用 close() 方法来关闭 Scanner,以释放系统资源。 注意:在使用 Scanner 读取整数时,你需要先引入 java.util.Scanner 包。 ### 回答2: 在Java中,我们可以使用Scanner类来一次性读取多个整数。下面是一个示例代码: ```java import java.util.Scanner; public class ReadMultipleIntegers { public static void main(String[] args) { // 创建Scanner对象 Scanner scanner = new Scanner(System.in); System.out.print("请输入多个整数,使用空格分隔:"); // 使用hasNextInt()方法判断输入是否为整数 while (scanner.hasNextInt()) { int num = scanner.nextInt(); System.out.println("读取到整数:" + num); } // 关闭Scanner对象 scanner.close(); } } ``` 在这个示例中,我们首先创建了一个Scanner对象,并将其绑定到System.in,即标准输入流。然后,使用hasNextInt()方法判断输入是否为整数。如果是整数,则使用nextInt()方法读取整数,并打印出来。程序会一直读取输入,直到遇到非整数输入为止。 我们可以在命令行中输入多个整数,使用空格分隔它们。例如,输入"1 2 3",程序会依次读取并打印出整数1、2和3。 需要注意的是,在读取完所有整数后,我们应该调用Scanner对象的close()方法来关闭它,以释放资源。 以上就是使用Java一次性读取多个整数的方法。希望对你有帮助! ### 回答3: 在Java中,如果我们想一次性读取多个整数,可以使用Scanner类来实现。Scanner类是Java中一个方便的输入处理类,可以用来读取命令行输入或者文件内容。 首先,我们需要导入java.util.Scanner类。然后,我们可以创建一个Scanner对象来接收输入。例如: Scanner scanner = new Scanner(System.in); 接下来,我们可以使用Scanner的nextInt()方法来读取下一个整数。如果我们想要读取多个整数,我们可以使用循环和数组来实现。例如,我们可以使用一个while循环读取用户输入,然后将每个整数保存到一个数组中。代码如下: int[] numbers = new int[10]; // 假设我们要读取10个整数 int i = 0; while(i < 10) { numbers[i] = scanner.nextInt(); i++; } 在上述代码中,我们首先创建了一个大小为10的整数数组numbers,用于保存用户输入的整数。然后,我们使用一个while循环来读取用户输入,并将每个整数依次保存到数组中。循环的结束条件是i小于10,即读取了10个整数。 最后,我们可以通过遍历数组来输出读取到的整数。例如,我们可以使用一个for循环来输出数组中的每个元素。代码如下: for(int j = 0; j < 10; j++) { System.out.println(numbers[j]); } 以上就是使用Scanner类一次性读取多个整数的基本步骤。希望能对你有所帮助!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值