FTP编程,一般就三大问题,楼主看看是哪一个 ?1.主动模式 和 被动模式 问题;
2.命令连接 和 数据连接 问题;
3.文件数据的编码传输问题。1.客户端这边存在NAT或者PAT的时候(或者路由器,防火墙的时候),采用被动模式进行下载即可。
2.网络较慢或者文件数据较大使得数据传输时间超长,造成控制连接被中间节点(防火墙或路由器)强行断开。当然,有的服务器也会自行断开超时的控制连接。
3.传输文件可以选用ACSII码和Binary进行传输,在选用ACSII码时由于操作系统不同,回车换行符的内容有可能会被更改。

解决方案 »

  1.   


    // 设置以二进制形式传输
    ftpClient.setFileType(FTP.BINARY_FILE_TYPE); 
      

  2.   


    都加了还是不行……再用sun的试试了只能。
      

  3.   

    import java.io.File;  
    import java.io.FileInputStream;  
    import java.io.FileOutputStream;  
    import java.io.IOException;  import nc.itf.doc.DocDelegator;  
    import nc.vo.doc.doc_007.DirVO;  
    import nc.vo.pub.BusinessException;  
    import nc.vo.pub.SuperVO;  import org.apache.commons.net.ftp.FTPClient;  
    import org.apache.commons.net.ftp.FTPFile;  
    import org.apache.commons.net.ftp.FTPReply;  
    import org.apache.commons.net.ftp.FTP;  
    public class FtpTool {  
    private FTPClient ftp;  private String romateDir = "";  private String userName = "";  private String password = "";  private String host = "";  private String port = "21";  public FtpTool(String url) throws IOException {  
    //String url="ftp://user:password@ip:port/ftptest/psd";  
    int len = url.indexOf("//");  
    String strTemp = url.substring(len + 2);  
    len = strTemp.indexOf(":");  
    userName = strTemp.substring(0, len);  
    strTemp = strTemp.substring(len + 1);  len = strTemp.indexOf("@");  
    password = strTemp.substring(0, len);  
    strTemp = strTemp.substring(len + 1);  
    host = "";  
    len = strTemp.indexOf(":");  
    if (len < 0)//没有设置端口  
    {  
    port = "21";  
    len = strTemp.indexOf("/");  
    if (len > -1) {  
    host = strTemp.substring(0, len);  
    strTemp = strTemp.substring(len + 1);  
    } else {  
    strTemp = "";  
    }  
    } else {  
    host = strTemp.substring(0, len);  
    strTemp = strTemp.substring(len + 1);  
    len = strTemp.indexOf("/");  
    if (len > -1) {  
    port = strTemp.substring(0, len);  
    strTemp = strTemp.substring(len + 1);  
    } else {  
    port = "21";  
    strTemp = "";  
    }  
    }  
    romateDir = strTemp;  
    ftp = new FTPClient();  
    ftp.connect(host, FormatStringToInt(port));  }  public FtpTool(String host, int port) throws IOException {  
    ftp = new FTPClient();  
    ftp.connect(host, port);  
    }  public String login(String username, String password) throws IOException {  
    this.ftp.login(username, password);  
    return this.ftp.getReplyString();  
    }  public String login() throws IOException {  
    this.ftp.login(userName, password);  
    System.out.println("ftp用户: " + userName);  
    System.out.println("ftp密码: " + password);  
    if (!romateDir.equals(""))  
    System.out.println("cd " + romateDir);  
    ftp.changeWorkingDirectory(romateDir);  
    return this.ftp.getReplyString();  
    }  public boolean upload(String pathname, String filename) throws IOException, BusinessException {  int reply;  
    int j;  
    String m_sfilename = null;  
    filename = CheckNullString(filename);  
    if (filename.equals(""))  
    return false;  
    reply = ftp.getReplyCode();  
    if (!FTPReply.isPositiveCompletion(reply)) {  
    ftp.disconnect();  
    System.out.println("FTP server refused connection.");  
    System.exit(1);  
    }  
    FileInputStream is = null;  
    try {  
    File file_in;  
    if (pathname.endsWith(File.separator)) {  
    file_in = new File(pathname + filename);  
    } else {  
    file_in = new File(pathname + File.separator + filename);  
    }  
    if (file_in.length() == 0) {  
    System.out.println("上传文件为空!");  
    return false;  
    }   
      //产生随机数最大到99   
      j = (int)(Math.random()*100);  
      m_sfilename = String.valueOf(j) + ".pdf"; // 生成的文件名  
    is = new FileInputStream(file_in);  
    ftp.setFileType(FTP.BINARY_FILE_TYPE);  
    ftp.storeFile(m_sfilename, is);  
    ftp.logout();  
    } finally {  
    if (is != null) {  
    is.close();  
    }  
    }  
    System.out.println("上传文件成功!");  
    return true;  
    }  
    public boolean delete(String filename) throws IOException {  FileInputStream is = null;  
    boolean retValue = false;  
    try {  
    retValue = ftp.deleteFile(filename);  
    ftp.logout();  
    } finally {  
    if (is != null) {  
    is.close();  
    }  
    }  
    return retValue;  }  public void close() {  
    if (ftp.isConnected()) {  
    try {  
    ftp.disconnect();  
    } catch (IOException e) {  
    e.printStackTrace();  
    }  
    }  
    }  public static int FormatStringToInt(String p_String) {  
    int intRe = 0;  
    if (p_String != null) {  
    if (!p_String.trim().equals("")) {  
    try {  
    intRe = Integer.parseInt(p_String);  
    } catch (Exception ex) {  }  
    }  
    }  
    return intRe;  
    }  public static String CheckNullString(String p_String) {  
    if (p_String == null)  
    return "";  
    else  
    return p_String;  
    }  public boolean downfile(String pathname, String filename) {  String outputFileName = null;  
    boolean retValue = false;  
    try {  
    FTPFile files[] = ftp.listFiles();  
    int reply = ftp.getReplyCode();  ////////////////////////////////////////////////  
    if (!FTPReply.isPositiveCompletion(reply)) {  
    try {  
    throw new Exception("Unable to get list of files to dowload.");  
    } catch (Exception e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
    }  
    }  /////////////////////////////////////////////////////  
    if (files.length == 0) {  
    System.out.println("No files are available for download.");  
    }else {  
    for (int i=0; i <files.length; i++) {  
    System.out.println("Downloading file "+files[i].getName()+"Size:"+files[i].getSize());  
    outputFileName = pathname + filename + ".pdf";  
    //return outputFileName;  
    File f = new File(outputFileName);  //////////////////////////////////////////////////////  
    retValue = ftp.retrieveFile(outputFileName, new FileOutputStream(f));  if (!retValue) {  
    try {  
    throw new Exception ("Downloading of remote file"+files[i].getName()+" failed. ftp.retrieveFile() returned false.");  
    } catch (Exception e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
    }  
    }  }  
    }  /////////////////////////////////////////////////////////////  
    } catch (IOException e) {  
    // TODO Auto-generated catch block  
    e.printStackTrace();  
    }  
    return retValue;  
    }  }