【问题标题】:FTP Get works on windows but not on linuxFTP Get 在 Windows 上有效,但在 linux 上无效
【发布时间】:2010-10-11 07:58:56
【问题描述】:

我正在使用 FTP 客户端在 Java 中进行 FTP Get,如果我在 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();
    } 
        }  
  } 

【问题讨论】:

  • 只是浏览“FTP windows linux 文件大小”让我不得不问:您是以 ASCII 模式还是 BINARY 模式传输?它应该是 BINARY。

标签: java windows linux ftp client


【解决方案1】:

你需要告诉FTP服务器你要以二进制方式传输;如果你不这样做,行尾将被转换为本机系统的行尾,这是你绝对不想要的压缩文件。

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

【讨论】:

  • 感谢您的回复 Michael 和 spender,二进制模式传输成功!如果有人遇到类似的问题,我正在使用 apache commons library 中的 FTP Client 类,可以使用以下方法设置它: FTPClient client = new FTPClient(); client.setFileType(FTP.BINARY_FILE_TYPE);
猜你喜欢
  • 1970-01-01
  • 2013-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-10
  • 2014-10-23
  • 2011-02-21
  • 2017-12-14
相关资源
最近更新 更多