2012-05-25 130 views
1

我有此代碼下載單個文件。Ftp文件下載從java代碼

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"); 
    } 
} 

} 
} 

,這讓我像 錯誤,我希望u能理解,即時通訊現在面臨

問題java.net .SocketException:軟件導致連接中止:套接字寫入錯誤 at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.Socket OutputStream.socketWrite(SocketOutputStream.java:109) at 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) at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:229) at java.io.BufferedWriter.flush(BufferedWriter.java:254) at org.apache.commons.net.ftp.FTP .__ send(FTP.java: 496) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:470) at org.apache.commons.net.ftp.FTP.sendCommand(FTP.ja va:547) at org.apache.commons.net.ftp.FTP.port(FTP.java:872) at 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)

+1

而不是打印自定義消息,你應該打印堆棧跟蹤最有可能爲您提供有關發生事件的有用信息。 (''ioe.printStackTrace()') – assylias

+0

我已經這樣做了,但它給了我不可理解的文本 –

+0

,那些不可理解的文本可能非常有用。你爲什麼不編輯你的問題,並在底部添加該文本的內容? – assylias

回答

4

關閉firewall.in這個問題

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」。

+0

我剛剛這樣做,它說我已連接並在根上,但當我嘗試訪問一些數據失敗。 –

0

上給出的示例代碼,你應該調用FTPClient的enterLocalPassiveMode方法,如果您是在防火牆後面的文檔。