我一直在尝试使这段代码工作,并且现在浏览了stackoverflow一段时间但却无法找到答案。希望你能帮忙。
尝试从互联网下载zip文件,但会产生1 kb的zip文件。
更新:我尝试过Long.MAX_VALUE,但结果是一样的。我真的不确定是什么问题。普通文本文件只能用于文件,但不能用于zip文件。请帮助。
private static void testDownload() {
try {
URL website = new URL("http://www.sec.gov/Archives/edgar/data/1027884/000102788418000013/0001027884-18-000013-xbrl.zip");
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream("C:\\0001027884-18-000013-xbrl.zip");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
}catch(Exception e){
System.out.println("EXCEPTION: " + e.getMessage());
System.exit(2);
}
}
答案 0 :(得分:0)
使用transferFrom()可能比从源通道读取并写入此通道的简单循环更有效。许多操作系统可以直接从源通道将字节传输到文件系统缓存中,而无需实际复制它们。
注意:transferFrom中的第三个参数是要传输的最大字节数。 Integer.MAX_VALUE最多将传输2 ^ 31个字节,Long.MAX_VALUE最多允许2 ^ 63个字节(大于现有的任何文件)。
因此,在您指定1024时,我认为这就是为什么您的zip文件大小为1 KB。请尝试指定Long.MAX_VALUE。
希望这能解决您的问题。
答案 1 :(得分:0)
好的家伙们,终于根据zipfiles中的输出找到了问题。
只需将HTTP转换为HTTPS即可解决问题