2016-07-22 201 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