由于我毕业设计要涉及ftp遍历的问题 我在网上找了一个别人的代码  http://group.gimoo.net/review/98967   但是运行出现问题 package tool;import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
//import sun.net.ftp.FtpClient;public class Linkftp {
private static FTPClient ftp;
private static String host = "202.206.41.8";
private static String user = "anonymous";
private static String pass = "";
private  static int   port   =   21;
private static int recNum = 0;
private   String   path   =   "/";
private OutputStream outSteam = null;
public static void main(String[] args) {
ftp = new FTPClient();
boolean error = false;
try {
int reply;
ftp.connect(host);
System.out.println("Connected to " + host);
System.out.print(ftp.getReplyString()); 
reply = ftp.getReplyCode();
ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
ftp.login(user, pass);
Date startTime = new Date();
traverse(ftp, ftp.printWorkingDirectory());
Date endTime = new Date();
System.out.println("遍历耗时" + String.valueOf(endTime.getTime() - startTime.getTime() / 60000.0) + "分钟");
System.out.println("共有文件数:" + recNum + "个");ftp.logout();
} catch (IOException e) {
error = true;
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {}
}
System.exit(error ? 1 : 0);
}
}public static void traverse(FTPClient client, String path) {
    System.out.println("测试" + ftp);
String prefix = "";
//System.out.println(path);
try {
FTPFile[] files = client.listFiles(path);
for (int i = 0; i < files.length; i++) {
if (files[i].getName().equals(".") || files[i].getName().equals("..")) {
continue;
} else if (files[i].isDirectory()) {
String tempDir = client.printWorkingDirectory() + "/" + files[i].getName();
client.changeWorkingDirectory(tempDir);
traverse(client, tempDir);
prefix += client.printWorkingDirectory();
client.changeToParentDirectory();
} else {
String temp = client.printWorkingDirectory();
if (temp.equals("/")) {
recNum++;
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out
.println("URL:" + temp + new String(files[i].getName().getBytes()));
System.out.println(files[i].getSize() / 1000000.0 + "MB");
System.out.println(files[i].getTimestamp().getTime());
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("\r\n\r\n");
} else {
recNum++;
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("URL:" + temp + "/"
+ new String(files[i].getName().getBytes()));
System.out.println(files[i].getSize() / 1000000.0 + "MB");
System.out.println(files[i].getTimestamp().getTime());
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++");
System.out.println("\r\n\r\n");
}
}
}} catch (IOException e) {
e.printStackTrace();
}
}}测试的结果如下 :Connected to 202.206.41.8
220 Serv-U FTP Server v5.0 for WinSock ready...
测试org.apache.commons.net.ftp.FTPClient@c20e24
成功生成(总时间:0 秒)也就是说 只有连接 但是貌似登录ftp.login(user, pass); 根本就没有执行 求教。。

解决方案 »

  1.   

    你在login之前就用了
    ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);
      

  2.   

    apache出了一个FTP访问的客户端。
    好像叫FtpClient的客户端比较好像,曾经在一个项目里用过。
    楼主可以在网上搜一下。
      

  3.   

    你单是把
    ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);
    注掉就可以运行了还有什么错?你说明白点啊
      

  4.   


    再说明白点吧
    FTP.ASCII_FILE_TYPE是file type
    ftp.setFileTransferMode设定的是transfer mode
    你这个函数调用本身就是错的
    如果你只是想得到文件列表, 不用设置这些
      

  5.   

    FTPFile[] files = client.listFiles(path);
      我traverse 方法里面这个语句是不是有问题啊
      

  6.   

    晕倒……
    我要吐血了……你的程序我都跑过了
    只要注掉ftp.setFileTransferMode这句话,就OK了
      

  7.   

      FTPFile[] files = client.listFiles(path);      就是这个语句的问题
      

  8.   

    毕业设计就做得复杂一点,把ftp协议看看,用socket写
      

  9.   

    你自己debug一遍看看啊判断一下你的login函数返回值,看看login成功没有
      

  10.   

    我的就是1.4.1你的setFileTransferMode参数用的不是transfer mode,而是file type,2.0也行?算了,解决了就行啊