2012-10-28 24 views
0

我做在Java中,從網絡服務器下載文件的應用程序。這個文件是一個816kb的zip文件。我已經在3臺不同的計算機上測試了應用程序,並且它不適用於一臺計算機。對於那個它只下載文件的13kb然後停止。當我檢查htaccess的日誌,我看到這一點:Java將無法完成下載zip文件

一個: 「GET /cache.zip HTTP/1.1」 200 816938 「 - 」 「Mozilla的/ 4.0(Windows 7的6.1)的Java/1.7.0_07」

b: 「GET /cache.zip HTTP/1.1」 200 134320 「 - 」 「Mozilla的/ 4.0(Windows 7的6.1)的Java/1.7.0_09」

(PC機工作時,PC b不工作)

我已經嘗試了許多不同的方式來下載Java中的文件,但所有的方面,它停止13KB後下載。我也試着用512M內存運行te應用程序,但這不是問題。

這是我現在有:

DataInputStream in = new DataInputStream(conn.getInputStream()); 
DataOutputStream out = new DataOutputStream(new FileOutputStream(new File(Config.CACHE_DIR+File.separator+"cache.zip"))); 
byte[] data = new byte[1024]; 

while((count = in.read(data,0,1024)) >= 0){ 
    out.write(data, 0, count); 
} 

但這個while循環將不會停止,因此卡在in.read

+6

java會不會影響什麼的服務器上。給你有兩個相同的URL請求產生兩個大小不同的反應,別的東西是怎麼回事。 –

+0

你關閉outputstream嗎? – olyanren

+0

是的,在while循環之後 –

回答

0

運行一個簡單的獨立測試,以確保問題與PC,而不是你的軟件:

import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 

public class Scratch { 

public static void main(String[] args) throws IOException { 
    URL url = new URL("http://url.to.zip"); 

    InputStream in = url.openStream(); 
    FileOutputStream out = new FileOutputStream("test.zip"); 
    byte[] buffer = new byte[1024]; 
    int read = 0; 
    while ((read = in.read(buffer)) >= 0) { 
     out.write(buffer, 0, read); 
    } 
} 

} 
0

我通常使用Apache下議院IO IOUtils.copy()的流之間進行復制。它使用緩衝區將字節從一個流複製到另一個流。

順便說一下,在您的情況下,無需使用Data InputStream和DataOutputStream包裝。你可以直接使用InputStream和FileOutputStream。

隨着IOUtils,代碼將變爲:

InputStream in = conn.getInputStream(); 
File outputFile = new File(Config.CACHE_DIR + File.separator + "cache.zip"); 
OutputStream out = new FileOutputStream(outputFile); 
try { 
    IOUtils.copy(in, out); 
} finally { 
    output.close(); 
} 

如果你不想使用IOUtils ...

int count; 
byte[] data = new byte[1024]; 
while ((count = in.read(data)) > 0) { 
    out.write(data, 0, count); 
} 
+0

感謝您的回答,但我正在尋找一種解決方案,而無需使用外部庫。 –

+1

更新給一個答案,而不庫。 –

+0

試過了,但沒有工作。我也嘗試了NIO方法,但也不起作用。我認爲它是一個在PC上試圖下載它的問題,因爲它在2個PC上工作,並且不能在1個PC上工作。 –