【问题标题】:What's wrong with this FTP code?这个 FTP 代码有什么问题?
【发布时间】:2014-08-29 10:13:17
【问题描述】:

我正在尝试使用 Java.net.* 库来访问 FTP 文件。我要做的是为此文件初始化一个 InputStream:

ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt

为什么这段代码不起作用?我不断收到 IOException。

private static void downloadNasdaqList(){
    String nasdaqURL = "ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt";

    try {
        openFTP(new URL(nasdaqURL));

    } catch (IOException ex) {
        Logger.getLogger(PADailyQuotes.class.getName()).log(Level.SEVERE, null, ex);
    }
}

private static void openFTP (URL website){ 
    try{
        URLConnection urlc = website.openConnection();
        InputStream is = urlc.getInputStream();
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
    }
    catch (MalformedURLException MUE){
        System.out.println("ERROR: openFTP- Invalid URL");
        System.exit(2);
    }
    catch (IOException IOE){
        System.out.println("ERROR: openFTP - Unable to establish connection");
        System.exit(3);
    }
}

权限有问题吗?我不这么认为,因为我们只需将 URL 复制并粘贴到浏览器中即可访问该页面。

另外,如果我有兴趣使用 org.apache.commons.net.ftp.FTP 和 org.apache.commons.net.ftp.FTPClient 库,就像他们在这里做的那样:

http://codejava.net/java-se/networking/ftp/java-ftp-file-download-tutorial-and-example

对于我提供的文件,我应该为 connect() 方法的服务器和端口以及 login() 方法的用户名和密码输入什么? (这是假设我链接的 ftp 文件确实是公开的,并且我没有给定的用户名或密码。)

如果这是一个愚蠢或重复的问题,请提前道歉。我使用了搜索功能,并尽我所能关注了另一个 StackOverflow 线程;但是,我的代码仍然无法正常工作。感谢阅读。

编辑:具体的例外是

2014 年 7 月 8 日上午 8:35:03 pa.dailyquotes.PADailyQuotes openFTP 严重: null java.net.ConnectException:连接超时:连接在 java.net.DualStackPlainSocketImpl.connect0(Native Method) 在 java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)...

线程“main”中的异常 java.lang.NullPointerException 在 pa.dailyquotes.PADailyQuotes.downloadNasdaqList (PADailyQuotes.java:67) 在 pa.dailyquotes.PADailyQuotes.main(PADailyQuotes.java:25)

第 67 行是

br.readLine(); //跳过第一行

br 是一个未通过上述方法正确初始化的 BufferedReader。

【问题讨论】:

  • 将 IOException 复制到您的问题中。
  • 你说它在浏览器中工作;那么该浏览器是否有任何特定设置,例如代理服务器?
  • @Gimby 你们扔了这么多技术术语,我需要一两天的时间来研究所有内容!哈哈哈……就是一个普通的网页浏览器,默认设置。适用于 Chrome、Opera、Firefox 等。我只是假设如果您可以通过 Web 浏览器评估某些内容,那么一定有一种方法可以使用 Java/Java 库访问这些内容。

标签: java ftp


【解决方案1】:

您很可能需要进行被动 FTP 连接,以使其通过您的计算机和 ftp.nasdaqtrader.com 之间的某个 NAT 路由器工作。

这不能通过 URLConnection 轻松完成,您需要使用专用的 FTP 库来完成。见https://stackoverflow.com/a/2282875/53897

【讨论】:

  • 我最终在我的 OP 教程中使用了 Apache 库。对于 FTPClient login() 方法的用户名和密码,我输入了“匿名”和我的电子邮件地址。事实证明,这是可公开访问的 FTP 文件的常用登录凭据。谢谢大家!
【解决方案2】:

连接超时通常意味着您看不到服务器。检查服务器名称/IP 配置是否正确,并尝试使用标准 FTP 客户端从运行程序的计算机手动 FTP 到该服务器,以确保您可以看到它。

【讨论】:

    猜你喜欢
    • 2012-08-07
    • 2013-06-05
    • 2014-06-04
    • 2011-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多