2016-07-22 8 views
0

Ich arbeite an einem Java-Projekt mit einem alten Framework EchoStudio3 mit einem Tomcat-Server. Ich versuche, eine generierte CSV-Datei herunterzuladen, aber ich bekomme stattdessen eine seltsame Datei.Java-Dateipfad Problem

Hier ist mein Code:

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(); 
} 

Ich habe einen Tomcat-Server auf einer lokalen Windows-Umgebung, wo ich meinen Code testen, aber die bereitgestellte Umgebung wird eine Linux-Umgebung sein, ich weiß nicht, ob dieser Wille verursachen ein anderes Problem, aber ich denke, dass Sie jetzt sollten. Die Download-Datei aus dem obigen Code heißt "C-Programme FilesApache Software Foundationapache-tomcat-7.0.64binreports.csv" und enthält eine Liste von Tomcat-Dateien (bootstrap.jar, catalina.bat, ...) und das ist wirklich seltsam, weil die generierte Datei im Verzeichnis bin existiert, aber es ist nicht diese, die heruntergeladen wird ...

Kommt das Problem aus dem Dateipfad?

+0

"file: ///" + dir + "/reports.csv" auch den Schrägstrich benötigt, ich habe jetzt die gute Datei , aber ich bekomme immer noch den Dateinamen mit dem vollständigen Dateipfad "C-Programme FilesApache Software Foundationapache-tomcat-7.0.64binreports.csv". –

+1

Ändern Sie 'filename.getAbsolutePath()' mit 'filename.getName()'? – Aaron

Antwort

0

Vielen Dank für Ihre Hilfe, ist der richtige Code dies:

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

Das ist nicht der richtige Weg, um eine Datei in eine URL zu konvertieren. Viele Zeichen (z. B. Leerzeichen) sind in URLs nicht zulässig. Der korrekte Weg, um eine Datei in eine URL zu konvertieren, ist 'filename.toURI(). ToURL()', die alle reservierten Zeichen korrekt entweichen lassen, um eine kompatible URL zu erstellen. – VGR