我有下面的java代码,在其中我将文件名abc.csv传递给调用方法,以便它将其转换为xls扩展名。假设下面的代码最初是
File file = new File("C:\abc.csv");
String filename = file.getName();
s = getFileExtension(file) ;
if (s.equalsIgnoreCase(".csv"))
{
convertcsvtoexcel(filename);
}
FileInputStream fin = null;
fin = new FileInputStream(file);
HSSFWorkbook workbook = new HSSFWorkbook(fin);
现在,由于有一个csv文件正在传递,因此它将调用将csv转换为excel的方法
现在请告诉我,我想在下面自定义这种转换方法,这样它就可以将转换后的文件返回到一个字节数组中,稍后我可以将相同的字节数组传递到代码的后期,特别是HSSFWorkbook构造函数,因为现在写下了正在发生的事情,它从我的c:中读取csv文件,并生成另一个.xls转换后的输出文件,并将其保存在我的c:驱动器中及以后我的一段代码再次从我的c:中读取转换后的输出文件,所以我想跳过这些重复的步骤,我想按顺序附加它,这样文件首先从我的c中读取,然后转换为xls,然后将相同的.xls文件传递给后面的代码。请建议如何实现这个
public static void convertcsvtoexcel(String filepath) throws Exception {
ArrayList arList=null;
ArrayList al=null;
//String fName = file.getName();
String thisLine;
int count=0;
FileInputStream file1 = null ;
file1 = new FileInputStream(new File(filepath));
DataInputStream myInput = new DataInputStream(file1);
int i=0;
arList = new ArrayList();
while ((thisLine = myInput.readLine()) != null)
{
al = new ArrayList();
String strar[] = thisLine.split(",");
for(int j=0;j<strar.length;j++)
{
al.add(strar[j]);
}
arList.add(al);
System.out.println();
i++;
}
try
{
HSSFWorkbook hwb = new HSSFWorkbook();
HSSFSheet sheet = hwb.createSheet("new sheet");
for(int k=0;k<arList.size();k++)
{
ArrayList ardata = (ArrayList)arList.get(k);
HSSFRow row = sheet.createRow((short) 0+k);
for(int p=0;p<ardata.size();p++)
{
HSSFCell cell = row.createCell((short) p);
String data = ardata.get(p).toString();
if(data.startsWith("=")){
cell.setCellType(Cell.CELL_TYPE_STRING);
data=data.replaceAll(""", "");
data=data.replaceAll("=", "");
cell.setCellValue(data);
}else if(data.startsWith(""")){
data=data.replaceAll(""", "");
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(data);
}else{
data=data.replaceAll(""", "");
cell.setCellType(Cell.CELL_TYPE_NUMERIC);
cell.setCellValue(data);
}
//*/
// cell.setCellValue(ardata.get(p).toString());
}
//System.out.println();
}
FileOutputStream fileOut = new FileOutputStream("C:\Brokerage\outputabc.xls");
hwb.write(fileOut);
fileOut.close();
// System.out.println("Your excel file has been generated");
} catch ( Exception ex ) {
ex.printStackTrace();
} //main method end
}
各位,请告诉我如何将文件存储在字节数组中好吧,我不希望转换后的文件.xls保存在我的本地计算机C驱动器中,我希望它最初应该从我的计算机C驱动器上提取,然后转换为xls,并且该xls文件在运行中直接传递到文件输入流本身
您可以使用ByteArrayOutputStream将数据保存到字节数组中,然后使用ByteArrayButStream将数据传递给HSSFWorkbook构造函数。
例如
public static byte[] convertcsvtoexcel(String filepath) throws IOException {
...
ByteArrayOutputStream out = new ByteArrayOutputStream();
hwb.write(out);
return out.toByteArray();
}
byte[] xlsData = convertcsvtoexcel(filename);
HSSFWorkbook workbook = new HSSFWorkbook(new ByteArrayInputStream(xlsData));
但也许你根本不需要这么做。相反,convertcsvtoexcel
方法可以只返回hwb
。为什么要将hwb
工作簿转换为字节数组,然后再转换回来?似乎没有必要。