2013年9月4日 星期三

[Java] FTPClient 使用Binary Mode

檔案,是一組Binary Code的集合,故又會稱做Binary File(通常使用HEX表示),但這樣的檔案是不具有可讀性的,所以又定義由ASCII字元所組成的檔案, 稱做ASCII File或Text File。

一般在做檔案複製,若使用ASCII File來處理,在不同的作業系統間,則可能會發生錯誤,因不同作業系統之間的 "換行字元"定義不一樣,如
  • Windows : \r\n (0x0D 0x0A)
  • Linux : \n (0x0A)
故通常,在做複製檔案時,會使用Binary的方式做處理。

  

 上圖是使用FTPClient,從Windows透過FTP傳送檔案到Linux系統上,
  • 左邊 : Windows下的原始檔
  • 右邊 : 透過FTPClient 傳送給Linux下的檔案
圖中清楚顯示了透過FTPClient傳送到Linux下的檔案多了0x0D,這是因為FTPClient預設是使用ASCII Mode,並且在Windows作業系統底下,以至於當要寫入段行時,會增加0x0D字元,故要解決這個問題,只要將讀取檔案的模式改成 Binary Mode即可。

FTPClient 的設定如下:

FTPClient client = new FTPClient();
client.setFileType(FTP.BINARY_FILE_TYPE);
client.setFileTransferMode(FTP.BINARY_FILE_TYPE); 

 Reference :
[1]  Ascii vs. Binary Files 
[2]  Jave FTPClient Document

沒有留言:

張貼留言