2009-01-28 108 views
3

我有一个问题,我似乎无法解决... 我做了一个文件的http下载,但在服务器和客户端上的文件的CRC32做不匹配。此外,该文件有不同的大小,所以显然我必须做错了什么......当我通过Firefox下载时,文件大小没问题......所以我猜这是在客户端代码中的某处。Java http下载损坏文件

我已经找到Corrupt file when using Java to download file,但这并没有帮助我要么...

下面的代码:

private void downloadJar(String fileName, long crc32Server) throws IOException { 
    System.out.println("Downloading file '" + fileName + "' from server '" + mServer + "'."); 
    HttpURLConnection sourceConnection = null; 
    BufferedInputStream inputStream = null; 
    BufferedWriter fileWriter = null; 
    long crc32Client; 
    try { 
    URL sourceURL = new URL(fileName); 
    try { 
     sourceConnection = (HttpURLConnection)sourceURL.openConnection(); 
    } 
    catch (MalformedURLException exc) { 
     throw new RuntimeException("Configured URL caused a MalformedURLException: ", exc); 
    } 
    sourceConnection.setRequestProperty("Accept-Encoding", "zip, jar"); 
    sourceConnection.connect(); 
    inputStream = new BufferedInputStream(sourceConnection.getInputStream()); 
    fileWriter = new BufferedWriter(new FileWriter(targetFolder + File.separator + fileName)); 
    CRC32 crc32 = new CRC32(); 
    for (int singleByte = inputStream.read(); singleByte != -1; singleByte = inputStream.read()) { 
     fileWriter.write(singleByte); 
     crc32.update(singleByte); 
    } 
    crc32Client = crc32.getValue(); 
    } 
    finally { 
    if (inputStream != null) { 
     inputStream.close(); 
    } 
    if (fileWriter != null) { 
     fileWriter.flush(); 
     fileWriter.close(); 
    } 
    if (sourceConnection != null) { 
     sourceConnection.disconnect(); 
    } 
    } 
    if (crc32Client != crc32Server) { 
    //  deleteFile(fileName); 
    throw new IOException("CRC32 did not match for file '" + fileName + "': " + crc32Client + "!=" 
     + crc32Server); 
    } 
} 
+0

如果您不将此设为社区wiki,您可能会收到更多回复。 – 2009-01-28 13:39:46

回答

6

您应该使用BufferedOutputStream,而不是一个FileWriter/BufferedWriter。一般来说,*Streams处理原始二进制数据,而*Writers处理字符数据(这是解释给定字符编码的原始二进制数据)。

+0

现在我得到至少相同的文件大小,谢谢你的tipp。但CRC检查仍然失败... – roesslerj 2009-01-28 13:42:30