How to download large sized Files (size > 50MB) in java

后端 未结 3 2024
攒了一身酷
攒了一身酷 2021-01-01 04:41

I\'m downloading files from a remote location, and the download is complete for smaller sized files and in-complete for large sized files (>10 MB). Here is my code that i ha

相关标签:
3条回答
  • 2021-01-01 05:05

    Please read BufferedInputStream's method .available() in the API.

    It returns the number of available bytes already downloaded (ie. the number of bytes you can read out of the stream without accessing/waiting for the network).

    You should create a fixed size byte array, fx. 2048 bytes, and use the read() methods until it returns -1.

    0 讨论(0)
  • 2021-01-01 05:11

    You can use apache commons IO library. It's easy. I have used it in many projects.

    File dstFile = null;
    // check the directory for existence.
    String dstFolder = LOCAL_FILE.substring(0,LOCAL_FILE.lastIndexOf(File.separator));
    if(!(dstFolder.endsWith(File.separator) || dstFolder.endsWith("/")))
        dstFolder += File.separator;
    
    // Creates the destination folder if doesn't not exists
    dstFile = new File(dstFolder);
    if (!dstFile.exists()) {
        dstFile.mkdirs();
    }
    try {
        URL url = new URL(URL_LOCATION);
        FileUtils.copyURLToFile(url, dstFile);
    } catch (Exception e) {
        System.err.println(e);
        VeBLogger.getInstance().log( e.getMessage());
    }
    
    0 讨论(0)
  • 2021-01-01 05:21

    Firstly, I'd suggest you use:

    FileInputStream in = new FileInputStream(file);  
    

    instead of:

    BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
    

    (To avoid building up memory usage)

    try
    {
        FileInputStream fileInputStream  = new FileInputStream(file);
        byte[] buf=new byte[8192];
        int bytesread = 0, bytesBuffered = 0;
        while( (bytesread = fileInputStream.read( buf )) > -1 ) {
            out.write( buf, 0, bytesread );
            bytesBuffered += bytesread;
            if (bytesBuffered > 1024 * 1024) { //flush after 1MB
                bytesBuffered = 0;
                out.flush();
            }
        }
    }
    finally {
        if (out != null) {
            out.flush();
        }
    }
    
    0 讨论(0)
提交回复
热议问题