Java无法完成下载zip文件

时间:2012-10-28 16:06:23

标签: java download

我正在用Java编写一个从Web服务器下载文件的应用程序。此文件是一个816kb的zip文件。我已经在3台不同的计算机上测试了该应用程序,但它不适用于一台计算机。对于那个,它只下载13kb的文件,然后停止。当我查看htaccess日志时,我看到了:

a:“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 a正在运行,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

2 个答案:

答案 0 :(得分:0)

我通常使用Apache Commons 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);
}

答案 1 :(得分: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);
    }
}

}
相关问题