【发布时间】:2015-06-23 16:51:24
【问题描述】:
我有下面的 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 驱动器上直接
【问题讨论】:
-
所以您想将文件写入 RAM 而不是磁盘?你可以用 ByteArrayOutputStream
-
@SpiderPig 非常感谢您明白了这一点,请您详细解释一下,请您更正我的上述代码并进行更改,这将有助于我掌握这些更改