2016-07-22 288 views
0

我使用带有Tomcat服务器的旧框架EchoStudio3处理Java项目。 我尝试下载一个生成的csv文件,但我得到一个奇怪的文件,而不是。Java文件路径问题

这里是我的代码:

String dir = System.getProperty("user.dir"); 
File filename = new File(dir, "reports.csv"); 
FileWriter fw = new FileWriter(filename); 

fw.append("User");name 
fw.append(','); 
fw.append("Count"); 
fw.append('\n'); 
fw.append("Bob"); 
fw.append(','); 
fw.append("20"); 
fw.append('\n'); 
fw.append("John"); 
fw.append(','); 
fw.append("5"); 
fw.append('\n'); 
fw.append("Mike"); 
fw.append(','); 
fw.append("2"); 
fw.append('\n'); 
fw.append("Total"); 
fw.append(','); 
fw.append("27"); 
fw.append('\n'); 

try { 
    fw.flush(); 
    fw.close(); 
    URL url = new URL("file:///" + dir); 
    FileURLConnection urlConn = (FileURLConnection) url.openConnection(); 
    String contentType = "text/csv"; 
    ApplicationInstance.getActive().enqueueCommand(new DownloadCommand(
       new FileDownload(contentType,"inline", 
       filename.getAbsolutePath(), 
       urlConn.getInputStream()))); 

} catch (Exception e) { 
    System.out.println("Error while flushing/closing fileWriter !!!"); 
    e.printStackTrace(); 
} 

我已经在本地Windows环境下测试我的代码Tomcat服务器,但部署的环境将是一个linux环境下,我不知道这是否会导致另一个问题,但我认为你现在应该。 从上面的代码中下载的文件被命名为“C-Program FilesApache Software Foundationapache-tomcat-7.0.64binreports.csv”,并在其中包含一个tomcat文件列表(bootstrap.jar,catalina.bat,...)这真的很奇怪,因为生成的文件存在于bin目录中,但不是这个谁下载的...

问题来自文件路径吗?

+0

“文件:///” +目录+“/reports.csv”,所需的斜线过,我现在有很好的文件,但我仍然使用完整的文件路径“C-Program FilesApache Software Foundationapache-tomcat-7.0.64binreports.csv”获取文件名。 –

+1

用'filename.getName()'更改'filename.getAbsolutePath()'? – Aaron

回答

0

谢谢您的帮助,正确的代码是这样的:

URL url = new URL("file:///" + dir + "/reports.csv"); 
FileURLConnection urlConn = (FileURLConnection) url.openConnection(); 
String contentType = "text/csv"; 
ApplicationInstance.getActive().enqueueCommand(new DownloadCommand(
    new FileDownload(contentType,"inline", 
        filename.toString(), 
        urlConn.getInputStream()))); 
+0

这不是将文件转换为URL的正确方法。 URL中不允许使用许多字符(如空格)。将文件转换为URL的正确方法是'filename.toURI()。toURL()',它将正确转义所有保留字符以创建一个兼容的URL。 – VGR