Java:文件输出帮助

问题描述

| 修复:我没有使用isFile()而是使用exist(),它似乎运行良好。如果可能,有人可以解释为什么此更改有效吗? 我正在尝试写出一个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));
    

解决方法

如果某些进程仍保持文件打开状态,则会发生这种情况。例如。您已经在文件上创建了ѭ1来读取文件,但在读取后再也不会对其调用ѭ2了。 与该问题无关,扩展的WAR文件夹不是用作永久存储的最佳位置。每当您重新部署WAR时,扩展的WAR文件夹中的所有那些文件都将丢失。同样,在代码中对servlet容器特定的路径进行硬编码也使其完全不可移植。 如果您的实际意图是使用Servlet根据请求将Excel文件返回给客户端,则您应该使用
WritableWorkbook workBook = Workbook.createWorkbook(response.getOutputStream());
// ...
这样,它无需中间文件即可立即写入响应。     ,使用File.createTempFile(prefix,suffix,directory)API:
String localName = new File(fileName).getName();
String nameNoExt = localName.substring(0,fileName.lastIndexOf(\".\"));
String extension = localName.substring(fileName.lastIndexOf(\".\")); // need to include the .
File directory = new File(\"c:/apache-tomcat-7.0.8/webapps/reports/\");
File destFile = File.createTempFile(nameNoExt,extension,directory)