【问题标题】:0 kb file created once FTP is done in java在 java 中完成 FTP 后创建 0 kb 文件
【发布时间】:2011-10-06 19:05:32
【问题描述】:

我正在尝试将文件通过 FTP 传输到远程计算机上。下面是我的代码:-

FTPClient ftpClient = new FTPClient(); 
ftpClient.connect("home.abc.com"); 
ftpClient.login("remote", "guesst12"); 
int replyCode = ftpClient.getReplyCode(); 
ftpClient.changeWorkingDirectory("share")) 
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
InputStream input = new FileInputStream(new File("H:/testFile.txt"));
OutputStream out =  ftpClient.storeFileStream("testFile.txt");
Util.copyStream(input, out);
out.close();
input.close();
ftpClient.completePendingCommand()
ftpClient.logout();
ftpClient.disconnect();

当我执行这段代码时,代码执行没有任何问题,但是在远程机器上,当我检查文件时,正在创建文件,但没有内容 (OKB) 文件。我在代码中遗漏了什么吗?

[更新]: 我尝试使用以下代码存储文件:-

if(ftpClient.storeFile("testCopy.txt", input)) {
    System.out.println("File Stored Successfully");
}
System.out.println(ftpClient.getReplyString());

现在我收到的回复代码是:- 451 Failure writing to local file. 这是什么意思。

谢谢

【问题讨论】:

标签: java ftp ftp-client apache-commons-net


【解决方案1】:

在反复观察之后,我不断想出不同的东西。

您确定 InputStream 在复制流之前正在读取文件吗?因为我不确定 FileInputStream 读取的是启动时的文件。

【讨论】:

  • 显然,当close() 被调用时,流总是会被刷新,根据这个问题的公认答案:stackoverflow.com/questions/2732260/…
  • 好吧,我不确定,但我知道 flush();过去为我解决了问题。任何人我都会用新想法编辑我的帖子。
  • @chris 虽然它在 FilterOutputStream 中,但在基本 OutputStream 中没有提到
  • 也许只是输入流在复制流之前没有读取文件?
  • 但是如果他复制流,那不就是复制当前存储的内容吗?从今以后,他必须先读取该文件,以便复制实际数据?
【解决方案2】:

我怀疑问题出在Util.copyStream,您没有提供哪个代码。我强烈建议您使用IOutils from Apache Commons IO 来复制流。

【讨论】:

  • 你确定没有抛出异常吗?我建议你在你的复制方法中使用调试器,看看是否真的在传输数据。
【解决方案3】:

查看older questions here有类似问题,看起来你打了a bug of the Commons-NET library(其中FTPClient是其中的一部分)。

尝试安装较新的版本(3.0.1 或更高版本)或较早的版本 (2.2) 来解决此问题。

【讨论】:

    【解决方案4】:

    尝试通过 FTP 复制文件时遇到 FTP 错误 451 的原因之一 特别是如果您看到在服务器端创建了 0 大小的文件, 可能是由于磁盘上没有空间

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-20
      • 2016-03-01
      • 1970-01-01
      • 2014-06-01
      • 2012-08-15
      • 2014-06-09
      • 2011-05-03
      相关资源
      最近更新 更多