Ftp文件下载来自java代码

时间:2012-05-25 14:42:17

标签: java ftp-client apache-commons-net

我有这个代码来下载单个文件。

    import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.commons.net.ftp.FTPClient;
public class NetTest {
public static void main(String[] args){
FTPClient client = new FTPClient( );
OutputStream outStream;
    try {

这是服务器和密码的一部分。

   client.connect( "servername" );
    client.login("noman123", "pass");
    String remoteFile = "/a.txt";
    outStream = new FileOutputStream( "a.txt" );

简单填写下载但在此行上出错

    client.retrieveFile( remoteFile, outStream );
} catch(IOException ioe) {
    System.out.println( "Error communicating with FTP server." );
} finally {
    try {
        client.disconnect( );
    } catch (IOException e) {
        System.out.println( "Problem disconnecting from FTP server" );
    }
}

}
}

它给了我错误 我希望你能理解我现在面临的问题

  

java.net.SocketException:软件导致连接中止:套接字写入错误           at java.net.SocketOutputStream.socketWrite0(Native Method)           在java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109)           在java.net.SocketOutputStream.write(SocketOutputStream.java:153)           at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)           at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)           at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)           at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:141)           在java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229)           在java.io.BufferedWriter.flush(BufferedWriter.java:254)           在org.apache.commons.net.ftp.FTP .__ send(FTP.java:496)           在org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:470)           在org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:547)           在org.apache.commons.net.ftp.FTP.port(FTP.java:872)           在org.apache.commons.net.ftp.FTPClient。 openDataConnection (FTPClient.java:667)           在org.apache.commons.net.ftp.FTPClient.retrieveFile(FTPClient.java:1595)           在FtpDownloadDemo.main(FtpDownloadDemo.java:25)

4 个答案:

答案 0 :(得分:4)

在此问题中关闭防火墙

答案 1 :(得分:2)

确保你可以ping服务器并手动登录,但假设你没关系,我还会做两件事。

1)根据FTP客户端文档,检查您是否真的已连接

// After connection attempt, you should check the reply code to verify success.
reply = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply))
        { // print more complete error }

有一个完整的例子here

2)可能是因为您正在尝试获取远程文件“/a.txt”,您试图访问根目录并且您的ftp服务器未设置为允许您访问。在您的ftp客户端设置为将用户转储到的目录中,只需尝试“a.txt”。

答案 2 :(得分:0)

如果您位于防火墙后面,那么您应该调用FTPClient的 enterLocalPassiveMode 方法的给定示例代码的文档。

答案 3 :(得分:0)

阅读这篇文章http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7077696

通过

解决此问题的工作
  

-Djava.net.preferIPv4Stack =真