2010-10-11 68 views
0

我正在做一個FTP獲取Java與FTP客戶端,如果我在Windows上運行正常,但是當我在Linux上運行相同的盒子時,它給我的文件做了一些修改。FTP獲取在Windows上的作品,但不是在Linux上

我有一個大小爲2872578的test.tar.gz文件(一堆文本文件),但是當我在linux上運行我的java程序時,它顯示爲2872541。任何人都面臨類似的問題?

//write files to local FS 

    OutputStream output = null; 
    for(int i = 0; i < files.length; i++) 
    { 
    if(files[i].getName().compareTo(file) == 0 || files[i].getName().compareTo("*") ==0) 
    if(!files[i].getName().startsWith(".") && files[i].getType() != 1) 
     { 
    try { 
    if(targetdir != null) 
    output = new FileOutputStream(new File(targetdir + files[i].getName())); 
    else 
     output = new FileOutputStream(new File(files[i].getName())); 
    System.out.println("Creating: " + files[i].getName()); 
    client.retrieveFile(files[i].getName(), output); 
    } catch (FileNotFoundException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
     } 
    } 
+1

只需在'FTP windows linux filesize'上瀏覽一下,就不得不問:你是以ASCII還是BINARY模式傳輸?它應該是BINARY。 – Konerak 2010-10-11 08:03:39

回答

2

您需要告訴FTP服務器您想以二進制模式傳輸;如果你不這樣做,行結尾將被轉換爲本地系統的結尾,這對於壓縮文件來說絕對不需要。

你怎麼把二進制模式轉移,我不能說 - 我不能看到你使用的是什麼類 - 但假設這是一個已經存在的類,則很可能是實現這一目的的方法在進行傳輸的類上(或者,使用指定此參數的參數進行重載)。

+0

謝謝你的回覆Michael和Spender,以二進制模式轉換工作!如果有人遇到類似的問題,我在apache commons庫中使用FTP客戶端類,並且可以使用下列設置:\t \t \t \t \t FTPClient client = new FTPClient(); client.setFileType(FTP.BINARY_FILE_TYPE); – user406257 2010-10-11 17:36:54

相關問題