使用java下载jar

使用java下载jar,java,jar,download,Java,Jar,Download,所以,我有这组代码来下载一个文件,它似乎认为它工作,但下载的文件是腐败的 args[1]是URL 当然你可以下载一个.jar 如果您成功下载了一个.exe(它只不过是一个任意长度的二进制字节流),那么我不知道为什么您在使用.jar(它也是一个二进制流)时会遇到问题。从数据流的角度来看,这两者应该是100%$等价的。我的猜测是.exe似乎在工作。。。但实际上,您未能复制部分或全部文件 最后,值得注意的是,.jar文件实际上是一个.zip文件。您可以将流包装在一个内置的Zip类中,并在读取文件时直接

所以,我有这组代码来下载一个文件,它似乎认为它工作,但下载的文件是腐败的

args[1]是URL

  • 当然你可以下载一个.jar

  • 如果您成功下载了一个.exe(它只不过是一个任意长度的二进制字节流),那么我不知道为什么您在使用.jar(它也是一个二进制流)时会遇到问题。从数据流的角度来看,这两者应该是100%$等价的。我的猜测是.exe似乎在工作。。。但实际上,您未能复制部分或全部文件

  • 最后,值得注意的是,.jar文件实际上是一个.zip文件。您可以将流包装在一个内置的Zip类中,并在读取文件时直接插入.jar内容。如果你愿意的话

  • 建议:

    检查复制的.exe的文件大小和/或校验和。尝试几个不同大小的.exe。如果您对.exe复制正确感到满意,那么我向您保证.jar也应该可以工作

  • 当然你可以下载一个.jar

  • 如果您成功下载了一个.exe(它只不过是一个任意长度的二进制字节流),那么我不知道为什么您在使用.jar(它也是一个二进制流)时会遇到问题。从数据流的角度来看,这两者应该是100%$等价的。我的猜测是.exe似乎在工作。。。但实际上,您未能复制部分或全部文件

  • 最后,值得注意的是,.jar文件实际上是一个.zip文件。您可以将流包装在一个内置的Zip类中,并在读取文件时直接插入.jar内容。如果你愿意的话

  • 建议:


    检查复制的.exe的文件大小和/或校验和。尝试几个不同大小的.exe。如果您对.exe复制正确感到满意,我向您保证.jar也能正常工作。

    问题是您正在刷新并关闭
    文件输出流,这会在
    缓冲输出流的缓冲区中留下一些字节;您的文件末尾将丢失0到1024字节之间的某个位置。将这两个调用改为flush和close
    bout
    ,问题就会得到解决


    另一方面,这:

    catch(Exception e){
    }
    

    这是一个最高级别的编程错误,也是许多难以诊断的问题的根源——这次不是这个问题,但它一直很冷。如果在传输过程中出现问题,错误消息将被忽略。不要这样做——永远不要这样做。

    问题是,您正在刷新并关闭
    文件输出流,这会在
    缓冲输出流的缓冲区中留下一些字节;您的文件末尾将丢失0到1024字节之间的某个位置。将这两个调用改为flush和close
    bout
    ,问题就会得到解决


    另一方面,这:

    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(),仍然存在问题。您可以尝试确定它们是如何使用的