2012-04-23 100 views
0

我写了一个独立的程序来上传文件到FTP服务器。代码运行良好,但我无法在FTP上找到该文件。以下是代码文件没有成功上传到FTP

import java.io.FileInputStream; 
import java.io.IOException; 
import java.net.SocketException; 

import org.apache.commons.net.ftp.FTPClient; 
import org.apache.commons.net.ftp.FTPReply; 


public class FTPDemo { 

    public static void main(String[] args) { 

     FTPClient ftp = new FTPClient(); 
     int reply; 

     try { 

      ftp.connect("ip address"); 
      ftp.login("username","password"); 
      reply = ftp.getReplyCode(); 

      if(FTPReply.isPositiveCompletion(reply)){ 
       System.out.println("Connected Success"); 
      }else { 
       System.out.println("Connection Failed"); 
       ftp.disconnect(); 
      } 

      FileInputStream fis = null; 
      String filename = "demo.txt"; 
      fis = new FileInputStream("C:\\demo.txt"); 
      System.out.println("Is file stored: "+ftp.storeFile(filename,fis)); 
      fis.close(); 
      ftp.disconnect(); 
     } catch (SocketException ex) { 
      ex.printStackTrace(); 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 

    } 
} 

存储的文件是否返回false。可能是什么问题呢 ?

+2

使用getReplyCode()方法获取ftp完全ftp错误代码。然后我们可以调查原因。 – Aslan986 2012-04-23 11:54:04

回答

2

让我给你的FTPClient documentation

的约定在FTPClient所有的FTP命令的方法是这样的:他们要么返回一个布尔值或其他一些价值。布尔方法在来自FTP服务器的成功完成答复时返回true,并在返回时返回false,从而导致错误情况或失败。返回非布尔值的方法将返回一个包含FTP命令生成的更高级别数据的值;如果回复导致错误条件或失败,则返回null。如果要访问导致成功或失败的确切FTP回复代码,则必须在成功或失败后调用getReplyCode。

换句话说,要理解失败的实际原因,您需要致电ftp.getReplyCode()并从那里开始工作。

+0

我相信回复代码是正确的,因为我可以在控制台“Connected Success”上看到消息。 – 2012-04-23 12:41:16

+0

是的,但请检查storeFile()调用后getReplyCode()返回的内容。 – maksimov 2012-04-23 13:12:37

+0

在调用storeFile()之前,答复代码为230,storeFile之后为500。 – 2012-04-23 13:52:26