在java应用程序中使用ftp4j库下载/上载时出现FTP错误

时间:2012-04-15 21:37:25

标签: java ftp ftp-client ftp4j

我想在java应用程序中下载一个文件,当我尝试它时,它会在我的硬盘驱动器上创建该文件但是无法完全下载它。我正在使用ftp4j库来完成它。

import it.sauronsoftware.ftp4j.*;
public class Main {
public static void main (String args[]){
    FTPClient client = new FTPClient();
    try{
    client.connect("ftp.myaddress.comlu.com");
    client.login("username", "password");
    System.out.println("Connection created");
    client.download("public_html/ZScreen.png", new java.io.File("d:/xxx/ZScreen.png"));
    System.out.println("Download successful");
    client.disconnect(true);
    }
    catch (Exception FTPException){
    System.out.println("Shit hit the fan");
    }
}
}

我总是创建Connection并且Shit击中了粉丝。此外,我的硬盘驱动器上创建了一个文件,但它的大小为0字节。

这是筹码竞赛

Connection created
java.net.SocketException: Connection reset
Shit hit the fan
at java.net.SocketInputStream.read(SocketInputStream.java:189)
at java.net.SocketInputStream.read(SocketInputStream.java:121)
at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:283)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:325)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:177)
at sun.nio.cs.StreamDecoder.read0(StreamDecoder.java:126)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:112)
at java.io.InputStreamReader.read(InputStreamReader.java:168)
at it.sauronsoftware.ftp4j.NVTASCIIReader.readLine(NVTASCIIReader.java:105)
at     it.sauronsoftware.ftp4j.FTPCommunicationChannel.read(FTPCommunicationChannel.java:142)
at it.sauronsoftware.ftp4j.FTPCommunicationChannel.readFTPReply(FTPCommunicationChannel.java:187)
at it.sauronsoftware.ftp4j.FTPClient.openPassiveDataTransferChannel(FTPClient.java:3538)
at it.sauronsoftware.ftp4j.FTPClient.openDataTransferChannel(FTPClient.java:3473)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3302)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3213)
at it.sauronsoftware.ftp4j.FTPClient.download(FTPClient.java:3078)
at Main.main(Main.java:9)

2 个答案:

答案 0 :(得分:5)

显然 Windows 7防火墙上的错误与在 IPv6 上使用 FTP 相关,这可以解释你的问题。请参阅错误报告here

以下变通办法中的任何一项都应足以解决此问题:

  • 在Windows控制台中以管理员身份运行以下命令:

    netsh advfirewall set global StatefulFtp disable

  • 使用选项-Djava.net.preferIPv4Stack=true

  • 运行JVM

答案 1 :(得分:1)

您无权在该文件夹上书写。检查库存是否处于“只读”状态。