这个FTP代码有什么问题?

时间:2014-07-08 15:29:09

标签: java ftp

我试图使用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:连接超时:connect at   java.net.DualStackPlainSocketImpl.connect0(Native Method)at   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)     at pa.dailyquotes.PADailyQuotes.main(PADailyQuotes.java:25)

第67行是

  

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

使用URLConnection无法轻松完成此操作,您需要使用专用的FTP库来执行此操作。见https://stackoverflow.com/a/2282875/53897