經過在使用原始字節流的會議聊天應用程序中苦苦試圖實現TCP文件傳輸後,我決定發送我想通過對象流傳輸的文件要容易得多。這些文件作爲內存中的File對象發送並存儲在其目的地(無論是中央服務器還是下載客戶端)。但是,這些文件只是File對象 - 客戶端應該能夠打開它們。有沒有辦法在Java中保存File對象作爲硬盤文件,甚至通過Java打開它們?Java保存/打開文件對象
回答
你是什麼意思與「文件對象」;你的意思是java.io.File
?
java.io.File
類只是一個目錄名稱和文件名的表示形式。它不是可以容納文件內容的對象。
如果你有數據,例如在內存中的字節數組,然後是的,你可以在保存到一個文件:
byte[] data = ...;
OutputStream out = new FileOutputStream(new File("C:\\someplace\\filename.dat"));
out.write(data);
out.close();
請參閱從Oracle的Java教程的Basic I/O Lesson學習如何讀寫文件與FileInputStream
和FileOutputStream
。
我已經決定了它更容易發,我想通過對象流傳輸 文件「
這不是壞主意:。費用內存和延遲(即時間和空間) 。只需發送和接收字節,用前面的東西告訴你文件名和文件大小。
我試着用PrintWriter發送文件名, d然後使用BufferedOutputStream處理原始字節。文件名和字節將從發送方發送沒有問題。接收端也可以接收文件名,但是它不能接收任何原始字節 - 它只是空文件。當我切換到使用對象流時,它似乎工作? –
@RichardStokes這將永遠不會工作。在連接的整個生命週期中,在兩端使用相同的流。 PrintWriter有一個緩衝區,BufferedOutputStream有一個緩衝區,BufferedReader有一個緩衝區,BufferedInputStream有一個緩衝區。太多的緩衝區以保證整個電線的連貫性。我將使用DataOutputStream/DataInputStream來處理所有事情,使用writeUTF()/ readUTF()發送文件名,使用writeLong()/ readLong()發送文件名,並使用write()和read()函數發送數據。 – EJP
謝謝,精彩的評論。 –
- 1. 打開/保存文件對話框
- 2. 文件打開/保存對話框
- 3. 文件打開/保存對話框
- 4. 打開並保存文件對話框
- 5. spreadsheetgear - 打開/保存文件
- 6. QTAgent32保存文件打開
- 7. 將Java對象保存到文件中
- 8. 文件打開並保存文件
- 9. XmlDocument的保存保持文件打開
- 10. 打開php文件,我想要打開或保存文件
- 11. 打開未保存的文本文件
- 12. 打開/保存對話框
- 13. HTA文件保存對話框而不是打開對話框
- 14. 保存和打開日誌文件
- 15. 打開保存的rchart html文件
- 16. 在javascript中打開/保存文件
- 17. 打開excel模板並保存文件
- 18. C#文件打開/轉換並保存
- 19. 如何打開和保存文件
- 20. 打開並保存xltm文件
- 21. 在Tkinter中打開保存文件
- 22. 打開並保存文件路徑android
- 23. 保存後自動打開pdf文件
- 24. 打開後無法保存文件
- 25. 在smartGWT中打開/保存文件
- 26. 打開之前保存的matlab文件
- 27. Java - NotSerializableException(保存對象)
- 28. 如何在java中打開並保存excel文件
- 29. 保存/打開對話框中單擊打開時文件名出錯
- 30. 此文件對象保持打開狀態嗎?
我不好意思,沒有意識到java.io.File無法保存文件內容。董事會如此:( –