我正在尝试使用Apache Commons FTP中的printWorkingDirectory()
,但它只返回null
。我无法导航目录,列表文件等。
登录传递一切都是成功但我怎么试试我无法更改当前目录。 我使用以下代码:
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FTPDownloadFileDemo {
public static void main(String[] args) {
String server = "FTP server Address";
int port = portNo;
String user = "User Name";
String pass = "Pasword";
FTPClient ftpClient = new FTPClient();
String dir = "stocks/";
try {
ftpClient.connect(server, port);
ftpClient.login(user, pass);
System.out.println( ftpClient.printWorkingDirectory());//Always null
//change current directory
ftpClient.changeWorkingDirectory(dir);
boolean success = ftpClient.changeWorkingDirectory(dir);
// showServerReply(ftpClient);
if (success)// never success
System.out.println("Successfully changed working directory.");
System.out.println(ftpClient.printWorkingDirectory());// Always null
} catch (IOException ex) {
System.out.println("Error: " + ex.getMessage());
ex.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.logout();
ftpClient.disconnect();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
}
答案 0 :(得分:1)
这是一个比较老的问题,值得回答。需要安全连接时,使用FTPClient可能导致此问题。如果确实如此,您可能必须切换到FTPSClient。此外,如果安全客户端无法解决问题,请从服务器输出以下代码片段的响应以解决问题:
ftpClient.addProtocolCommandListener(
new PrintCommandListener(
new PrintWriter(new OutputStreamWriter(System.out, "UTF-8")), true));
此外,如果您的IP地址未列入白名单,则服务器可以拒绝您的登录尝试。因此,必须能够查看日志。在打印当前工作目录时看到null的原因是您尚未登录。Login方法不会引发异常,而是返回一个布尔值,指示操作是否成功。更改目录时,您正在检查是否成功,但登录时却没有这样做。
boolean success = ftpClient.login(user, pass);
答案 1 :(得分:0)
我面临着同样的事情,但是我遇到了一个简单的步骤。 刚刚添加了这个。
boolean success = ftpClient.changeWorkingDirectory(dir);
ftpClient.printWorkingDirectory(); //add this line after changing the working directory
System.out.println(ftpClient.printWorkingDirectory()); //wont be getting null
这里有代码和控制台输出
FTPClient.changeWorkingDirectory - Unknown parser type: "/Path" is current directory
我知道我回答得太早了; -P,但是最近我看到了这篇文章。希望这对将来的搜索者有所帮助;-)