2011-01-21 3 views
0

Моего код,Загрузка файла в httpclient с помощью java?

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

Здесь я хочу загрузить определенный файл, используя HTTPClient с помощью Java. Она производит:

"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

Перекомпилированный код на моей машине, он работает отлично. Я могу получить файлы из Интернета.

Проверьте, если ваш веб-браузер может загрузить файл для вас (убедитесь, что это не проблема сети)

Одна вещь, чтобы заметить, однако, в вашем наконец блокировать вы можете закрыть потоки отдельно. Поэтому, если что-то пойдет не так с входным потоком, выходной поток все равно будет закрыт.

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*); 
Смежные вопросы