2012-01-13 51 views
3

这是我的代码:如何使用JAVA从互联网下载zip文件并将其保存在特定文件夹中?

public static void downloadZipFile() { 
    String saveTo = "C:\\Users\\aria\\Downloads\\Temp"; 
    try { 
     URL url = new URL("http://www.bcfi.be/download/files/R1112B2_BcfiHtm.zip"); 
     URLConnection conn = url.openConnection(); 
     InputStream in = conn.getInputStream(); 
     FileOutputStream out = new FileOutputStream(saveTo + "BcfiHtm.zip"); 
     byte[] b = new byte[1024]; 
     int count; 
     while ((count = in.read(b)) >= 0) { 
      out.write(b, 0, count); 
     } 
     out.flush(); out.close(); in.close();     

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

**当我编译它,我得到以下错误,但如果我直接在浏览器使用URL evrything是确定的。

我该如何解决?或者是有任何其他方式下载的zip文件**

java.net.UnknownHostException: www.bcfi.be 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:195) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
at java.net.Socket.connect(Socket.java:529) 
at java.net.Socket.connect(Socket.java:478) 
at sun.net.NetworkClient.doConnect(NetworkClient.java:163) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:395) 
at sun.net.www.http.HttpClient.openServer(HttpClient.java:530) 
at sun.net.www.http.HttpClient.<init>(HttpClient.java:234) 
at sun.net.www.http.HttpClient.New(HttpClient.java:307) 
at sun.net.www.http.HttpClient.New(HttpClient.java:324) 
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:970) 
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:911) 
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:836) 
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1172) 
at be.azvub.ext.prismaFlex.Exterahelp.download.DownloadFile.downloadZipFile(DownloadFile.java:72) 
at be.azvub.ext.prismaFlex.Exterahelp.download.DownloadFile.main(DownloadFile.java:37) 
+4

这不是一个Java问题,好像你有一个网络查询问题。你是否支持代理? – 2012-01-13 10:22:06

+0

你可以使用浏览器下载吗?我可以但我希望这个zip文件不包含敏感数据。 – adarshr 2012-01-13 10:26:03

+0

在我的情况下,我得到了连接时间。下面的解决方案也帮助了我。 – namalfernandolk 2014-12-02 10:24:16

回答

7

从Java文档引用:

抛出,表明一台主机的IP地址无法确定 。

确保程序不会被阻止由防火墙代理

UPDATE:

要配置代理,做彼得Liljenberg建议:

你可以在你的代码通过代理信息到的openConnection呼叫 这样的:

Proxy proxy = new Proxy(Proxy.Type.HTTP,new InetSocketAddress(“pro”,9999)); URLConnection conn = url.openConnection(proxy);

+0

我在代理服务器后面,我该如何修复它?proxy hostneam是“pro”,端口是“9999” – itro 2012-01-13 10:48:26

+0

@itro你必须通过代理来允许你的程序(实际上我没有经验该怎么做) – 2012-01-13 10:49:15

+1

不错的阿德尔,你是一名救命恩人! – namalfernandolk 2014-12-02 10:23:37

6

既然你落后的代理,你可以尝试一些不同的方法:启动时

1)将代理信息到JVM:

java -Dhttp.proxyHost=proxyhostURL -Dhttp.proxyPort=proxyPortNumber 
-Dhttp.proxyUser=someUserName -Dhttp.proxyPassword=somePassword javaClassToRun 

在你的情况下,它很可能是:

java -Dhttp.proxyHost=pro -Dhttp.proxyPort=9999 javaClassToRun 

2)你可以通过代理信息到的openConnection呼叫你这样的代码:

Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("pro",9999)); 
URLConnection conn = url.openConnection(proxy); 
相关问题