我需要提供一個功能,用戶可以在我的web應用程序中以excel/csv格式下載報告。一旦我在創建excel的Web應用程序中創建了一個模塊,然後將其讀取併發送到瀏覽器。它工作正常。這次我不想生成excel文件,因爲我沒有對文件系統的控制級別。我想一種方法是在StringBuffer中生成適當的代碼並設置正確的contenttype(我不確定這種方法)。其他團隊也有這個功能,但是當數據非常龐大時,他們正在掙扎。考慮到數據的大小,提供此功能的最佳方式可能非常巨大。是否可以在沒有客戶端注意的情況下發送數據塊(除了延遲下載)。 我忘記添加的一個問題是,當數據量非常大時,它也會在服務器端產生問題(CPU利用率和內存消耗)。是否有可能我讀了固定數量的記錄,如500,將其發送給客戶,然後讀取另一個500,直到完成。如何使用java高效下載大型csv文件
2
A
回答
2
您也可以生成HTML而不是CSV,並仍將內容類型設置爲Excel。這對着色和樣式文本很好。
當客戶端接受該壓縮時,您也可以使用gzip壓縮。通常有標準方法,像servlet過濾器。
從來沒有一個StringBuffer或更好的StringBuilder。更好地將其流出。如果你沒有(不能)調用setContentength,輸出就會被分塊(沒有預測性的進展)。
0
URL url = new URL("http://localhost:8080/Works/images/address.csv");
response.setHeader("Content-Type", "text/csv");
response.setHeader("Content-disposition", "attachment;filename=myFile.csv");
URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
int len;
byte[] buf = new byte[1024];
while ((len = stream.read(buf)) > 0) {
outs.write(buf, 0, len);
}
outs.close();
相關問題
- 1. 如何下載大型CSV文件?
- 2. 使用PHP高效創建大型csv文件
- 3. 如何使用Java將CSV文件下載到文件中
- 4. 如何使用StreamingOutput下載CSV文件
- 5. 如何使用jquery下載csv文件?
- 6. 如何使用HTMLAgilityPack下載CSV文件?
- 7. 如何使用koajs下載csv文件
- 8. 使用StreamingHttpResponse流式傳輸和下載大型CSV文件
- 9. 使用大型csv文件
- 10. 如何使用box api v2高效地下載大文件(> 1GB)
- 11. 下載大JSON文件使用Java
- 12. 使用java下載大文件
- 13. 使用cURL下載大型XML文件
- 14. 高效的方法文件大文件下載
- 15. 用Java編程式下載CSV文件
- 16. 如何使用Go有效地下載大文件?
- 17. 如何使用bigmemory軟件包加載混合類型的大型csv文件
- 18. 使用熊貓高效讀取大型CSV文件而不會崩潰
- 19. 如何使用Java下載.msi文件
- 20. 如何使用Java下載文件?
- 21. 如何在Java中高效地計算CSV文件的行
- 22. 如何使用google-api-java-client在Android上下載大文件?
- 23. 如何使用Javascript生成並下載大型文件clientside?
- 24. 如何在Python中高效地加載大文本文件
- 25. 如何在java中高效地讀取大文本文件
- 26. 如何在C#中高效地編寫大型文本文件?
- 27. 在Java中讀取大型CSV文件
- 28. 使用Java下載文件
- 29. 下載csv文件
- 30. 下載csv文件
請問你能解釋一下:從來沒有一個StringBuffer或更好的StringBuilder。更好地將其流出。 – dmay 2012-04-16 21:39:06
由於StringBuffer具有(不必要的)同步,StringBuffer的性能低於後來的StringBuilder。當然你不想首先在StringB *中收集很多東西,然後流出來。作爲一個管道流出來的效率更高,特別是在多用戶場景中。 – 2012-04-17 13:15:18
我查詢大約1000條記錄的數據庫,然後發送給客戶端,然後獲取下一批。這非常減少我的記憶足跡。我已經在profiler中測試並檢查了內存,並且它工作正常。現在我的應用程序不使用大量的內存。我可以在Profiler中看到,每當使用的內存達到臨界級別時,就會收集垃圾。 – dmay 2012-06-11 16:49:39