2011-01-21 13 views
0

私のコードは、私はJavaを使用してHttpClientをを使用して特定のファイルをダウンロードしたいと考え、ここでjavaを使用してhttpclientでファイルをダウンロードしますか?

import java.io.*; 
import java.net.*; 

public class DownloadHttp 
{ 
public static void main(String a[]) 
{ 
    DownloadHttp d = new DownloadHttp(); 
    String addr = "http://www.gmail.com"; 
    String file = "D:/venkatesh/Software/download1.html"; 
    d.download(addr,file); 
} 


    public void download(String address, String localFileName) { 
    OutputStream out = null; 
    URLConnection conn = null; 
    InputStream in = null; 
    try { 
    // Get the URL 
    URL url = new URL(address); 
    // Open an output stream to the destination file on our local filesystem 
    out = new BufferedOutputStream(new FileOutputStream(localFileName)); 
    conn = url.openConnection(); 
    in = conn.getInputStream(); 

    // Get the data 
    byte[] buffer = new byte[1024]; 
    int numRead; 
    while ((numRead = in.read(buffer)) != -1) { 
     out.write(buffer, 0, numRead); 
    }    
    // Done! Just clean up and get out 
} catch (Exception exception) { 
    exception.printStackTrace(); 
} finally { 
    try { 
     if (in != null) { 
      in.close(); 
     } 
     if (out != null) { 
      out.close(); 
     } 
    } catch (IOException ioe) { 
     // Shouldn't happen, maybe add some logging here if you are not 
     // fooling around ;) 
    } 
    } 
} 
} 

です。 それは生産:

"java.net.ConnectException: Connection timed out: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method)" as error. 

、事前に感謝し、それを解決する私を助けるためにどのように。

+0

192.168.50.45のサーバーがタイムアウトしたようです。おそらくJavaコーディングの問題のネットワーク問題のより多くの。 – Thilo

+0

URLを変更した後も同じエラーが生成されます。 – Venkat

答えて

1

私はそれがネットワークの問題だと思います。直接URLにアクセスしようとしましたか、ファイアウォールの背後にいますか?

1

私のマシンでコードを再コンパイルしても、それはうまくいきます。 Webからファイルを取得できます。お使いのWebブラウザは、(それがネットワークの問題ではないことを確認してください)あなたのために最終的にはあなたが個別のストリームをクローズする場合がありますブロックで、しかし注意すべき

一つのことを、ファイルをダウンロードすることができれば

チェック。したがって、入力ストリームに問題が生じた場合でも、出力ストリームは閉じられます。

finally { 
     try { 
      if (in != null) { 
       in.close(); 
      } 
     } catch (Exception ignored) {} 
     try { 
      if (out != null) { 
       out.close(); 
      } 
     } catch (Exception ignored) {} 
    } 
+0

PS:データをコピーするのにInputStreamを使用していない方がいいでしょう。代わりにチャンネルを使用してください(入力ストリームから作成することができます:Channels.newChannel(inputStream))。あるチャネルから別のチャネルへデータをコピーする方法に関するチュートリアルの混乱があります。 – Matt

0

私はあなたがインターネットに接続するときにプロキシを使用していると思います。

これらをコードに設定してから、もう一度やり直してください。

System.setProperty("http.proxyHost", *Proxy-IP*); 
System.setProperty("http.proxyPort", *Proxy-Port*);