将结果文件保存在java中的字节数组中



我有下面的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工作簿转换为字节数组,然后再转换回来?似乎没有必要。

相关内容

  • 没有找到相关文章

最新更新