Java FTP Get可以在windows上工作,但不能在linux上工作

Java FTP Get可以在windows上工作,但不能在linux上工作,java,windows,linux,ftp,client,Java,Windows,Linux,Ftp,Client,我正在使用FTP客户端在Java中进行FTP获取,如果我在windows上运行该客户端,效果会很好,但是当我在linux上运行相同的客户端时,它会通过一些修改来获取文件 我有一个test.tar.gz文件(一堆文本文件),大小为2872578,但在linux上运行java程序时显示为2872541。有人面临过类似的问题吗 //write files to local FS OutputStream output = null; for(int i = 0; i < files.l

我正在使用FTP客户端在Java中进行FTP获取,如果我在windows上运行该客户端,效果会很好,但是当我在linux上运行相同的客户端时,它会通过一些修改来获取文件

我有一个test.tar.gz文件(一堆文本文件),大小为2872578,但在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();
    } 
        }  
  } 
//将文件写入本地FS
OutputStream输出=null;
对于(int i=0;i
您需要告诉FTP服务器您要以二进制模式传输;如果不这样做,行尾将转换为本机系统的行尾,而压缩文件肯定不需要这样做


如何将传输置于二进制模式,我不能说-我看不出您使用的是什么类-但假设这是一个预先存在的类,则在执行传输的类上很可能有一个用于此目的的方法(或者,一个带有指定此参数的重载).

只要浏览一下“FTP windows linux文件大小”,我就会问:您是以ASCII还是二进制模式传输?它应该是二进制的。谢谢你们的回复Michael和spender,在二进制模式下传输工作正常!如果有人遇到类似的问题,我将使用ApacheCommons库中的FTP客户机类,可以使用:FTPClient Client=new FTPClient();client.setFileType(FTP.BINARY\u文件类型);