在我的应用程序中,我以块的形式获取 excel 文件作为输入。比方说,如果 excel 文件大小为 20 MB,那么我将得到 4 个块,其中每个块(字节 [])为 5MB。我正在将每个块(字节 [])写入临时文件(没有扩展名)。我正在使用这个临时文件来重新生成以多个块发送给我的实际 excel 文件。我的要求是生成的 excel 文件必须与我分块得到的 excel 文件相同。
示例代码:
读取excel文件,转换成块并将这些块写入临时文件。
公共静态无效 readExcelFileBytes(String srcFile) 抛出 IOException {
File file = new File(srcFile); FileInputStream fis = new FileInputStream(file); byte[] buf = new byte[1024 * 5]; // 5KB int totalNoOfBytes = 0; try { for (int readNum; (readNum = fis.read(buf)) != -1;) { appendByteArrayToTempFile(buf); } } catch (IOException ex) { ex.printStackTrace(); } System.out.println("Read: Total Size Bytes" + totalNoOfBytes); } public static boolean appendByteArrayToTempFile(byte[] byteArray) { boolean result = false; BufferedWriter writeout = null; File bodfile = null; FileOutputStream out = null; try { bodfile = new File("C://tempFile"); out = new FileOutputStream(bodfile, true); out.write(byteArray); result = true; } catch (IOException ex) { ex.printStackTrace(); } finally { try { //writeout.close(); out.close(); } catch (IOException ex) { ex.printStackTrace(); } } return result; }
使用 temp byte[] 重新生成 excel 文件。
公共静态 void tempToFile(String srcFilePath) 抛出 IOException{
File file = new File("C://tempFile");
FileInputStream fis = new FileInputStream(file);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
byte[] buf = new byte[1024];
try {
for (int readNum; (readNum = fis.read(buf)) != -1;) {
bos.write(buf, 0, readNum); //no doubt here is 0
}
} catch (IOException ex) {
ex.printStackTrace();
}
byte[] bytes = bos.toByteArray();
// Create source file from Temp's byte array
FileOutputStream fileOuputStream = new FileOutputStream(srcFilePath);
fileOuputStream.write(bytes);
fileOuputStream.flush();
fileOuputStream.close();
}
问题:
公共静态 void main(String s[]) 抛出 IOException {
// XLS POC
readExcelFileBytes("C://Input.xlsx");
tempToFile("C://Output.xlsx");
}
但是当使用临时文件 byte[] 生成 excel 文件时,它会被修改。有人可以帮助我是否遵循正确的方法使用临时文件字节 [] 重新生成 excel 文件?