Java 什么';这个FTP代码怎么了?

Java 什么';这个FTP代码怎么了?,java,ftp,Java,Ftp,我正在尝试使用Java.net.*库访问FTP文件。我试图做的是初始化此文件的InputStream: 为什么这个代码不起作用?我总是收到一个例外 private static void downloadNasdaqList(){ String nasdaqURL = "ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt"; try { openFTP(new URL(nasdaqURL));

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

为什么这个代码不起作用?我总是收到一个例外

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.ftp客户端库感兴趣,就像这里一样:

对于我提供的文件,connect()方法的server和port以及login()方法的用户名和密码应该是什么?(这是假设我链接的ftp文件确实是公共文件,并且我没有给定的用户名或密码。)

如果这是一个愚蠢或重复的问题,请提前道歉。我使用了搜索功能,并尽我所能跟踪其他StackOverflow线程;但是,我的代码仍然不起作用。谢谢你的阅读

编辑:特定的异常是

2014年7月8日上午8:35:03宾夕法尼亚州dailyquotes.PADailyQuotes开放FTP严重: null java.net.ConnectException:连接超时:连接在 java.net.DualStackPlainSocketImpl.connect0(本机方法)位于 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。

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

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


使用URLConnection很难做到这一点,您需要使用专用的FTP库来做到这一点。请参见

将IOException复制到您的问题中。您说它在浏览器中工作;那个么,那个浏览器有并没有像代理服务器那个样的特定设置?@Gimby你们这些家伙抛出了这么多的技术术语,我要花一两天的时间来研究所有东西!哈哈哈。。。它只是一个带有默认设置的普通web浏览器。适用于Chrome、Opera、Firefox等。我只是假设,如果您可以通过web浏览器评估某些内容,那么一定有一种方法可以通过Java/Java库访问这些内容。我最终使用了Apache库,如我的OP教程中所述。对于FTPClient login()方法的用户名和密码,我使用了“匿名”还有我的电子邮件地址。事实证明,这是公开访问FTP文件的常见登录凭据。谢谢大家!