Java当前目录返回“null”

时间:2015-11-19 13:50:09

标签: java apache ftp directory

我正在尝试使用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();
            }
        }
    }
}

2 个答案:

答案 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,但是最近我看到了这篇文章。希望这对将来的搜索者有所帮助;-)