使用java下载jar
所以,我有这组代码来下载一个文件,它似乎认为它工作,但下载的文件是腐败的 args[1]是URL使用java下载jar,java,jar,download,Java,Jar,Download,所以,我有这组代码来下载一个文件,它似乎认为它工作,但下载的文件是腐败的 args[1]是URL 当然你可以下载一个.jar 如果您成功下载了一个.exe(它只不过是一个任意长度的二进制字节流),那么我不知道为什么您在使用.jar(它也是一个二进制流)时会遇到问题。从数据流的角度来看,这两者应该是100%$等价的。我的猜测是.exe似乎在工作。。。但实际上,您未能复制部分或全部文件 最后,值得注意的是,.jar文件实际上是一个.zip文件。您可以将流包装在一个内置的Zip类中,并在读取文件时直接
检查复制的.exe的文件大小和/或校验和。尝试几个不同大小的.exe。如果您对.exe复制正确感到满意,我向您保证.jar也能正常工作。问题是您正在刷新并关闭
文件输出流,这会在缓冲输出流的缓冲区中留下一些字节;您的文件末尾将丢失0到1024字节之间的某个位置。将这两个调用改为flush和closebout
,问题就会得到解决
另一方面,这:
catch(Exception e){
}
这是一个最高级别的编程错误,也是许多难以诊断的问题的根源——这次不是这个问题,但它一直很冷。如果在传输过程中出现问题,错误消息将被忽略。不要这样做——永远不要这样做。问题是,您正在刷新并关闭文件输出流,这会在缓冲输出流的缓冲区中留下一些字节;您的文件末尾将丢失0到1024字节之间的某个位置。将这两个调用改为flush和closebout
,问题就会得到解决
另一方面,这:
catch(Exception e){
}
这是一个最高级别的编程错误,也是许多难以诊断的问题的根源——这次不是这个问题,但它一直很冷。如果在传输过程中出现问题,错误消息将被忽略。不要这样做——永远不要这样做。空的捕获块通常不是一个好主意,可能会隐藏症状
Change:
catch(Exception e){
}
To:
catch(Exception e){
e.printStackTrace();
}
空捕集块通常不是一个好主意,可以隐藏症状
Change:
catch(Exception e){
}
To:
catch(Exception e){
e.printStackTrace();
}
在研究了这个简单的代码后,它在windows系统中运行良好
对于mac或其他,您需要更改:
在研究了这个简单的代码后,它在windows系统中运行良好
对于mac或其他,您需要更改:
您确定源没有损坏吗?我建议,如果您还没有这样做,请使用浏览器下载相同的文件,并验证它是否正常。然后将你认为是“好”的版本与被破坏的版本进行比较,确定问题出在哪里。我敢肯定,我已经尝试下载了许多不同的前男友和jar,包括minecraft。我总是先在浏览器中签入1。确保下载工作正常,2。为了看看需要多长时间,我甚至编译和测试了您的代码(包括我建议的修改),它对我来说非常适合。您需要在文本编辑器中打开这些文件,正如我在回答下面的评论中所说的。例如,您可能在代理服务器后面,您的浏览器是为代理服务器设置的,但Java不是;然后,正如我所说,您的文件可能包含错误页面,而不是预期的内容。您确定源代码没有损坏吗?我建议,如果您还没有这样做,请使用浏览器下载相同的文件,并验证它是否正常。然后将你认为是“好”的版本与被破坏的版本进行比较,确定问题出在哪里。我敢肯定,我已经尝试下载了许多不同的前男友和jar,包括minecraft。我总是先在浏览器中签入1。确保下载工作正常,2。为了看看需要多长时间,我甚至编译和测试了您的代码(包括我建议的修改),它对我来说非常适合。您需要在文本编辑器中打开这些文件,正如我在回答下面的评论中所说的。例如,您可能在代理服务器后面,您的浏览器是为代理服务器设置的,但Java不是;然后你的文件可以包含,正如我所说的,错误页面而不是预期的内容。嗯,让我试着完全运行exe,看看会发生什么,我觉得你是对的嗯,让我试着完全运行exe,看看会发生什么,我觉得你是对的try
块的最后两行应该是bout.flush();about.close()
和catch
块应至少包含e.printStackTrace()代码>。另外,将fos.flush()和fos.close()更改为bout.flush()和bout.close(),仍然存在问题。您可以尝试确定它们是如何使用的