gpt4 book ai didi

java - 下载时写入额外行的 CSV 文件

转载 作者:行者123 更新时间:2023-12-02 12:00:24 26 4
gpt4 key购买 nike

当我尝试从 servlet 代码导出 csv 文件时,它显示了正确的记录,但最后它显示了额外的行。

示例:它需要 1000 行,但它显示 1041 行长和 1000 条记录。

下面是我的代码和 Excel 工作表。

// for downloading csv
public void getDownloaded(String filepath, HttpServletResponse response) {
try {
File file = new File(filepath);
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=" + file.getName());
FileInputStream in = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte[] outputByte = new byte[4096];
// copy binary content to output stream
while (in.read(outputByte, 0, 4096) != -1) {
out.write(outputByte, 0, 4096);
}
in.close();
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}

最佳答案

实际上,getDownloaded 方法中存在一个微妙的错误。如果读取的字节数少于 4096 个字节,此处的代码最终会读取并写入错误的字节数,从而将潜在的垃圾写入输出流:

//copy binary content to output stream
while(in.read(outputByte, 0, 4096) != -1){
out.write(outputByte, 0, 4096);
}

它实际上应该在写入语句中使用确切的读取字节数:

int length;
while ((length = in.read(outputByte, 0, 4096)) != -1) {
out.write(outputByte, 0, length);
}

关于java - 下载时写入额外行的 CSV 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47301931/

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