使用java下载jar

时间:2012-03-10 05:15:27

标签: java jar download

所以,我有这组代码下载文件,似乎认为它有效,但下载的文件已损坏。

          try{
                java.io.BufferedInputStream in = new java.io.BufferedInputStream(new
                    java.net.URL(args[1]).openStream());
                java.io.FileOutputStream fos = new java.io.FileOutputStream(args[2]);
                java.io.BufferedOutputStream bout = new BufferedOutputStream(fos,1024);
                byte data[] = new byte[1024];
                int count;
                while( (count = in.read(data,0,1024)) != -1){
                bout.write(data,0,count);
                }
                fos.flush();
                fos.close();
           } 
           catch(Exception e){
           }

args [1]是网址

4 个答案:

答案 0 :(得分:3)

问题是你正在刷新并关闭FileOutputStream,这会在BufferedOutputStream的缓冲区中留下一些字节;你的文件将在最后的0到1024字节之间丢失。 bout,您的问题将得到解决。


顺便说一下,这个:

catch(Exception e){
}

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

答案 1 :(得分:1)

空捕获块通常不是一个好主意,可以隐藏症状。

Change:
    catch(Exception e){ 
    } 
To:
    catch(Exception e){ 
        e.printStackTrace();
    }    

答案 2 :(得分:0)

  1. 当然可以下载.jar。

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

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

  4. 建议:

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

答案 3 :(得分:0)

  

研究了这个简单的代码,适用于windows系统   而对于mac或其他你需要改变:

     import java.io.BufferedInputStream;
        import java.io.BufferedOutputStream;
        import java.io.DataInputStream;
        import java.io.File;
        import java.io.FileOutputStream;
        import java.io.IOException;
        import java.io.InputStream;
        import java.io.OutputStream;
        import java.net.HttpURLConnection;
        import java.net.MalformedURLException;
        import java.net.URL;
        import java.net.URLConnection;
        import java.nio.channels.Channels;
        import java.nio.channels.FileChannel;
        import java.nio.channels.ReadableByteChannel;
        import java.nio.charset.MalformedInputException;
        import java.util.Scanner;
        import org.apache.commons.io.FileUtils;

        /**
         *
         * @author aleem
         */
        public class Get {


           public static void main (String[] args) throws IOException, InterruptedException {
          /**Change the url with your jar file url**/
                String fileUrl = "http://elambak.com/Supported.jar";
    /**Assign any name to this newly downloaded file with destination location if required **/


                String destinationFile = "abc1.jar";

                saveFile(fileUrl, destinationFile);

           }
            public static void saveFile(String fileUrl, String destinationFile) throws IOException {
                      int BUFFER_SIZE = 4096;

                URL url = new URL(fileUrl);
                                HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();

/** This user agent is using for windows for other OS need to change **/


              httpConn.setRequestProperty("User-Agent", "  Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 (.NET CLR 3.5.30729)");

                int responseCode = httpConn.getResponseCode();
                    String disposition = httpConn.getHeaderField("Content-Disposition");
                    String contentType = httpConn.getContentType();
                    int contentLength = httpConn.getContentLength();
                    InputStream is = httpConn.getInputStream();
                OutputStream os = new FileOutputStream(destinationFile);

                    int bytesRead = -1;
                    byte[] buffer = new byte[BUFFER_SIZE];
                    while ((bytesRead = is.read(buffer)) != -1) {
                        os.write(buffer, 0, bytesRead);
                    }


            }

        }