由于我毕业设计要涉及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); 根本就没有执行 求教。。
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); 根本就没有执行 求教。。
ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);
好像叫FtpClient的客户端比较好像,曾经在一个项目里用过。
楼主可以在网上搜一下。
ftp.setFileTransferMode(FTP.ASCII_FILE_TYPE);
注掉就可以运行了还有什么错?你说明白点啊
再说明白点吧
FTP.ASCII_FILE_TYPE是file type
ftp.setFileTransferMode设定的是transfer mode
你这个函数调用本身就是错的
如果你只是想得到文件列表, 不用设置这些
我traverse 方法里面这个语句是不是有问题啊
我要吐血了……你的程序我都跑过了
只要注掉ftp.setFileTransferMode这句话,就OK了