2016-07-22 5 views
0

Я работаю над проектом Java со старым Framework EchoStudio3 с сервером Tomcat. Я пытаюсь загрузить сгенерированный файл 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(); 
} 

У меня есть сервер Tomcat на локальной среде Windows, где я проверить мой код, но развернутая среда будет среда линукс, я, если это будет не знаю вызывают еще одну проблему, но я думаю, что вы должны сейчас. Загрузите файл из приведенного выше кода, называется «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.getAbsolutePath()' с 'filename.getName()'? – 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

Смежные вопросы