Java 爪哇元';无法完成zip文件的下载
我正在用Java制作一个从Web服务器下载文件的应用程序。此文件是一个816kb的zip文件。我已经在3台不同的计算机上测试了该应用程序,但它在一台计算机上不起作用。对于这一个,它只下载13kb的文件,然后停止。当我检查htaccess日志时,我看到: 答:“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应用程序,但这不是问题所在 这就是我现在拥有的:Java 爪哇元';无法完成zip文件的下载,java,download,Java,Download,我正在用Java制作一个从Web服务器下载文件的应用程序。此文件是一个816kb的zip文件。我已经在3台不同的计算机上测试了该应用程序,但它在一台计算机上不起作用。对于这一个,它只下载13kb的文件,然后停止。当我检查htaccess日志时,我看到: 答:“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“-”Mozi
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循环不会停止,所以它会卡在
中。read
我通常使用Apache Commons IO在流之间进行复制。它使用缓冲区将字节从一个流复制到另一个流
顺便说一下,在您的案例中不需要使用DataInputStream和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);
}
运行一个简单的独立测试,以确保问题出在电脑而不是软件上:
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);
}
}
}
java不会影响服务器上的内容。如果有两个相同的url请求生成两个不同大小的响应,则会发生其他情况。请将代码放入try-catch块中,并让可能的异常打印堆栈跟踪,这样我们就可以知道是否存在问题。已经存在问题,但没有错误。根据DataInputStream.read(…)的文档,它只是在等待in.read:“此方法会一直阻止,直到输入数据可用、检测到文件结尾或引发异常为止。”这似乎是一个连接/传输问题。感谢您的回答,但我正在寻找一个不使用外部库的解决方案。已更新以提供一个没有库的答案。已尝试,但不起作用。我也尝试过NIO方法,但也不起作用。我认为这是一个问题,在电脑上,试图下载它,因为它是工作在2台电脑上,而不是工作在1台电脑上。