gpt4 book ai didi

Java:文件输出帮助

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

已修复:我没有调用 isFile(),而是使用了 contains(),它似乎工作正常。如果可能的话有人可以解释为什么这个改变有效吗?

我正在尝试写入 Excel 文件,但如果名称已存在,则在尝试创建该文件时遇到问题。

基本上,我正在获取上传到服务器的文件,读取它,然后在具有相同文件名的新位置输出报告文件。我尝试通过简单地检查文件是否已经存在然后在文件名上添加一个数字来做到这一点。如果文件不存在或存在但没有数字(例如 filename.xls),我的代码将有效。如果存在名为“filename1.xls”的文件,则服务器在尝试写入该文件时似乎会挂起。可以采取什么措施来解决这个问题?

这是我的代码:

        String destination = "c:/apache-tomcat-7.0.8/webapps/reports/" + fileName.substring( fileName.lastIndexOf("\\")+1, fileName.lastIndexOf(".")) + ".xls";
int filenum = 1;
while (new File(destination).isFile()) {
destination = "c:/apache-tomcat-7.0.8/webapps/reports/" + fileName.substring( fileName.lastIndexOf("\\")+1, fileName.lastIndexOf(".")) + filenum + ".xls";
filenum++;
}
WritableWorkbook workbook = Workbook.createWorkbook(new File(destination));

最佳答案

如果某个进程仍然保持文件打开,就会发生这种情况。例如。您已在文件上创建了一个 FileInputStream 来读取它,但在读取后从未对其调用 close()

<小时/>

与问题无关,展开的 WAR 文件夹不是用作永久存储的最佳位置。每当您重新部署 WAR 时,展开的 WAR 文件夹中的所有这些文件都将丢失。此外,在代码中硬编码 servlet 容器特定的路径使其完全不可移植。

如果您的实际意图是使用 servlet 根据每个请求将 Excel 文件返回给客户端,那么您应该使用

WritableWorkbook workBook = Workbook.createWorkbook(response.getOutputStream());
// ...

通过这种方式,它可以立即写入响应,而不需要中间文件。

关于Java:文件输出帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6129185/

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