读取多个csv文件并将其放在Excel中的不同工作表中不起作用

Sus*_*ngh 0 java file-io apache-poi

我正在尝试读取文件夹中存在的几个csv文件,并将绝对路径放在列表中,然后循环到列表并将数据插入到不同表中的Excel中,但由于某种原因,只有最后一个循环才会覆盖所有内容.

package excel;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class FileReading {

    public static void csvToXLS(String filename, String sheetno) {
        try {
            String csvFile = filename; //csv file address
            String excelFile = "E:\\test.xls"; //xlsx file address
            HSSFWorkbook workBook = new HSSFWorkbook();
            HSSFSheet sheet = workBook.createSheet(sheetno);
            String currentLine = null;
            int RowNum = 0;
            BufferedReader br = new BufferedReader(new FileReader(csvFile));
            while ((currentLine = br.readLine()) != null) {
                String str[] = currentLine.split(",");
                HSSFRow currentRow = sheet.createRow(RowNum);
                RowNum++;
                for (int i = 0; i < str.length; i++) {
                    currentRow.createCell(i).setCellValue(str[i]);
                }
            }
            FileOutputStream fileOutputStream = new FileOutputStream(excelFile);
            workBook.write(fileOutputStream);
            fileOutputStream.close();
            System.out.println("Done");
        } catch (Exception ex) {
            System.out.println(ex.getMessage() + "Exception in try");
        }
    }

    public static List listOfFiles() {
        List<String> results = new ArrayList<String>();
        File[] files = new File("f:\\csv").listFiles();

        for (File file : files) {
            if (file.isFile()) {
                results.add(file.getAbsolutePath());
            }
        }
        return results;
    }

    public static void main(String[] args) {
        List list = listOfFiles();
        int size = list.size();
        for (int i = 0; i < size; i++) {
            csvToXLS(list.get(i).toString(), "sheet" + i + 1);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

rge*_*man 5

Workbook每次打电话都会重新创建和保存csvToXLS,所以只有最后一次通话能够存活,覆盖所有其他通话.

Workbook在开始for循环之前,只创建一次,将其传递给csvToXLS.然后该方法将Sheet在现有方法上创建一个新的Workbook.然后在for循环结束后,您可以写出并保存Workbook.