我想壓縮文件(例如foo.csv)並將其上傳到服務器。我有一個工作版本,它創建一個本地副本,然後刪除本地副本。我如何壓縮一個文件,以便我可以在不寫入硬盤的情況下發送它,並純粹在內存中執行它?在內存中創建一個Zip文件
17
A
回答
45
使用ByteArrayOutputStream與ZipOutputStream來完成任務。
您可以使用ZipEntry指定要包含在zip文件中的文件 。
下面是使用上述類型的一個例子,
String s = "hello world";
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try(ZipOutputStream zos = new ZipOutputStream(baos)) {
/* File is not on the disk, test.txt indicates
only the file name to be put into the zip */
ZipEntry entry = new ZipEntry("test.txt");
zos.putNextEntry(entry);
zos.write(s.getBytes());
zos.closeEntry();
/* use more Entries to add more files
and use closeEntry() to close each file entry */
} catch(IOException ioe) {
ioe.printStackTrace();
}
現在baos
包含您zip文件作爲stream
3
作爲NIO.2 API,這是在Java SE 7引入,支撐自定義文件系統,您可以嘗試將內存文件系統(如https://github.com/marschall/memoryfilesystem)與Oracle提供的Zip文件系統結合使用。
注意:我已經編寫了一些實用程序類來使用Zip文件系統。
該庫是開源的,它可能有助於開始。
這裏是教程:http://softsmithy.sourceforge.net/lib/0.4/docs/tutorial/nio-file/index.html
你可以從這裏下載庫:http://sourceforge.net/projects/softsmithy/files/softsmithy/v0.4/
或者使用Maven:
<dependency>
<groupId>org.softsmithy.lib</groupId>
<artifactId>softsmithy-lib-core</artifactId>
<version>0.4</version>
</dependency>
相關問題
- 1. 在內存中創建ZIP文件
- 2. 從內存中的多個文件創建zip文件
- 3. 在python中創建內存文件中的zip文件
- 4. 如何從文件字節開始在內存中創建一個zip文件?
- 5. 從內存流C創建Zip文件#
- 6. 在字節[]中創建內存中的zip文件。 Zip文件全部損壞
- 7. 在內存中創建一個ZIP存檔使用System.IO.Compression
- 8. 在C++中創建一個zip存檔
- 9. 在C#中的多個內存文件中創建Zip歸檔文件
- 10. 如何在ruby中的內存中創建zip文件?
- 11. 下載一個用Django完全在內存中創建的zip文件
- 12. 從另一個zip文件重新創建zip文件
- 13. 在C中創建一個文件夾的Zip文件夾#
- 14. ZipArchive :: addEmptyDir在.zip文件中創建一個空文件
- 15. 使用PHP創建一個zip文件
- 16. 從內存文件創建磁盤上的Zip文件
- 17. 創建一個內存文件
- 18. 創建Zip文件在Windows和提取Zip文件在Linux中
- 19. 內存中創建的Zip文件已損壞
- 20. 從多個文件創建zip文件
- 21. PHP從內存中創建一個新的ZIP
- 22. 從一個文件夾創建zip文件 - 在c + +
- 23. 創建使用Go的存檔Unicode文件名zip存檔/ ZIP
- 24. 創建一個ZIP文件腳本不會創建ZIP(無錯誤)
- 25. 如何在CMIS中創建一個zip文件?
- 26. 如何在asp.net中創建一個zip文件5
- 27. 在C++中創建一個zip壓縮文件
- 28. 反正在salesforce中創建一個zip文件?
- 29. 如何從兩個.doc文件創建一個.zip文件?
- 30. 如何在Asp.Net中創建Zip文件?
確保您調用close() - 在最後的方法塊或更好:使用Java 7的自動資源管理。 – Puce
@Puce:我打算僅顯示一段代碼,但在您發表評論之後,我認爲添加更多結構化的代碼會很好。感謝您的評論.. :) –
@BlackPanther可以詳細說明/顯示一個詳細的版本,如果原始文件存在於本地目錄中。 –