gpt4 book ai didi

jakarta-ee - 使用 Apache POI 在 java 中将多个 csv 复制到 xls 文件时出现问题

转载 作者:行者123 更新时间:2023-12-01 06:58:05 27 4
gpt4 key购买 nike

我对这个博客和 IT 领域都很陌生。我在将 csv 文件中的值复制到现有 xls 文件时遇到问题。我正在使用 Apache POI。我有两个csv文件和两个现有的xls文件output0.xls和output1.xls用于各自的csv文件。我试图将第一个csv文件的值复制到output0.xls,将第二个csv文件复制到output1.xls。我已经为此编写了代码,并且运行良好

但问题是,将第一个 csv 文件的值放入 output0.xls 后,当我尝试将第二个 csv 文件中的值复制到 output1.xls 时,它将第一个 csv 文件的值附加到第二个 csv 文件的值。 csv 文件并将这两个文件的值写入到 output1.xls。

我无法找出主要问题在哪里。请任何人尽快帮助我......否则我将面临一个大问题。


使用的代码是

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class Demo {

// FileOutputStream fileOut=null;
//FileInputStream fis=null;

public static void main(String[] args) throws IOException {

/*File f=new File("c:\\");
// return boolean-->System.out.println(f.isDirectory());
File[]files=f.listFiles();*/
String thisline;
ArrayList<String> al = null;
ArrayList<ArrayList<String>> arlist = new ArrayList<ArrayList<String>>();

String libRoot=new File(".").getAbsolutePath();
libRoot=libRoot.replaceAll("\\\\", "/");
File f=new File(libRoot+"/result");
FilenameFilter filter = new FilenameFilter()
{
@Override public boolean accept(File dir, String name)
{
return name.endsWith(".csv");
}
};


File file[]=f.listFiles(filter);


for(int r=0;r<file.length;r++){
File currentFile=file[r];


FileInputStream fis = new FileInputStream(currentFile);
//DataInputStream myInput = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while ((thisline = br.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisline.split(",");

for (int j = 0; j < strar.length; j++) {


al.add(strar[j]);
}

arlist.add(al);
//i++;

}

fis.close();


HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet"+r);

for (int k = 0; k < arlist.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);
HSSFRow row = sheet.createRow((short) k);

for (int p = 0; p < ardata.size(); p++) {
//System.out.print(ardata.get(p));
HSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}



FileOutputStream fileOut = new FileOutputStream(libRoot+"/result/output"+r+".xls");
hwb.write(fileOut);
fileOut.flush();
fileOut.close();
br.close();

//hwb=null;
}


}


}

最佳答案

您的代码的简单问题是您没有重新初始化 arlist。

因此,CSV1 和 CSV2 的数据都被复制到 output1.xls 中。

需要添加arlist.clear();正如下面的代码中提到的。

更新代码为:

for(int r=0;r<file.length;r++){
arlist.clear();
File currentFile=file[r];


FileInputStream fis = new FileInputStream(currentFile);
//DataInputStream myInput = new DataInputStream(fis);
BufferedReader br = new BufferedReader(new InputStreamReader(fis));
while ((thisline = br.readLine()) != null) {
al = new ArrayList<String>();
String strar[] = thisline.split(",");

for (int j = 0; j < strar.length; j++) {


al.add(strar[j]);
}

arlist.add(al);
//i++;

}

fis.close();


HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet"+r);

for (int k = 0; k < arlist.size(); k++) {
ArrayList<String> ardata = (ArrayList<String>) arlist.get(k);
HSSFRow row = sheet.createRow((short) k);

for (int p = 0; p < ardata.size(); p++) {
//System.out.print(ardata.get(p));
HSSFCell cell = row.createCell((short) p);
cell.setCellValue(ardata.get(p).toString());
}
}



FileOutputStream fileOut = new FileOutputStream(libRoot+"/result/output"+r+".xls");
hwb.write(fileOut);
fileOut.flush();
fileOut.close();
br.close();

//hwb=null;
}


}

希望这有帮助。

关于jakarta-ee - 使用 Apache POI 在 java 中将多个 csv 复制到 xls 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6303352/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com