2010-05-18 41 views
0

我必須創建一個代碼來在遠程機器上上傳/下載文件。但是,當我上傳文件的新行不會保存以及它會自動插入一些二進制字符。此外,我無法將文件保存爲其實際格式,我必須將其另存爲「filename.ser」。我正在使用java的序列化 - 反序列化概念。以其實際格式進行文件上傳 - 下載

在此先感謝。

+0

謝謝你們。你的回答很有用。但我仍然有一些問題。我只能成功上傳文本文件。當我試圖對一個單詞文件做同樣的事情時,它會完全轉換爲二進制文件。在文本文件中,當我上傳時,它本身也添加了一些二進制字符。請注意,我沒有使用序列化(ObjectInputStream/ObjectOutputStream)。爲了您的參考,我會告訴你我的代碼。 – RAS 2010-05-19 06:03:24

+0

這裏是我的代碼:private static void upload()throws IOException,Exception {File upldfile = new File((path to the remote pc)+「/testSer.txt」); FileOutputStream fos = new FileOutputStream(upldfile); File file = new File(「c:/test1.txt」); FileInputStream fis = new FileInputStream(file); byte [] b =新字節[(int)file.length()]; for(int j = 0; j RAS 2010-05-19 06:03:43

回答

1

您究竟如何傳輸文件?如果您使用InputStreamOutputStream的實現,它們將逐字節地工作,所以最終應該得到二進制等於的輸出。

如果您使用的ReaderWriter實現,但根據一些字符映射轉換爲字節的字符,然後保存時進行逆過程。根據各種機器的平臺編碼(如果不明確指定字符集,可能還有其他影響),最終可能會導致二進制文件的差異。

你提到換行符的事實使我認爲你使用Readers來發送字符串(也可能是你自己通過手動添加新行來拼接字符串)。如果您希望文件是二進制相等的,那麼將它們作爲字節流發送並逐字存儲。如果您希望它們與給定字符集中的字符串相同,請使用Readers和Writers,但明確指定字符集。如果你想讓它們在平臺默認設置中作爲字符串傳輸(不是很有用),那麼接受它們不會與文件一樣是二進制文件。


(另外,你的問題實際上並沒有提供太多的信息來解決它。對我來說,它基本上寫着「我寫了一些代碼做X,並且它不工作,我有什麼錯?「你似乎認爲你的代碼是正確的,但沒有列出它,但同時認識到它不是......)

+1

+1。他毫無疑問使用了'BufferedReader#readLine()'。這是修剪換行符的那個。你不想在**二進制**文件上做到這一點。 – BalusC 2010-05-18 12:11:04