Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在检查Java中的完整文件下载_Java_Io_Download - Fatal编程技术网

正在检查Java中的完整文件下载

正在检查Java中的完整文件下载,java,io,download,Java,Io,Download,基本上,我是将一个相对较小的.exe文件拉到本地存储的文件夹中。理想情况下,我想做的是找到文件下载完成的时间,这样我可以执行一些功能,然后转到下一个文件 以下是代码的一部分: String saveTo = System.getProperty("user.dir") + "\\Applications\\Setup\\"; ReadableByteChannel rbc = Channels.newChannel(download.openStream()); FileOutputStream

基本上,我是将一个相对较小的.exe文件拉到本地存储的文件夹中。理想情况下,我想做的是找到文件下载完成的时间,这样我可以执行一些功能,然后转到下一个文件

以下是代码的一部分:

String saveTo = System.getProperty("user.dir") + "\\Applications\\Setup\\";
ReadableByteChannel rbc = Channels.newChannel(download.openStream());
FileOutputStream fos = new FileOutputStream(saveTo + "setup.exe");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
//Check if file is finished here. 
//Repeat function above for different file here  

你可以这样做。将其设置为方法,如果成功完成,则返回true;如果未成功完成,则返回false。它在完成之前不会回来。您传入要保存的文件名和下载url

private boolean saveFile(String fileName, URL download)
{
    try
    {          
        String saveTo = System.getProperty("user.dir") + "\\Applications\\Setup\\";

        ReadableByteChannel rbc = Channels.newChannel(download.openStream());

        FileOutputStream fos = new FileOutputStream(saveTo + fileName);

        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);

        fos.close();

        return true;
    }
    catch (FileNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (MalformedURLException e)
    {
        e.printStackTrace();
    }
    catch (IOException e)
    {
        e.printStackTrace();
    }
    return false;
}

fos.getChannel().transferFrom(rbcs,0,Long.MAX_值)不会在单独的线程上执行,因此在trasferFrom()完成之前它不应该继续,对吗?你测试过这个吗?我几分钟前刚测试过,你是对的。我将编辑这个问题以删除这一部分,尽管仍然需要检查它是否完成。我在这方面取得了一些相当好的成功,它应该涵盖我想要达到的目的的所有内容。好奇的是,是否也可以验证文件大小或类似性质的东西,以确保在该方法返回后文件完全下载?这可能是不必要的,但我有点好奇。根据javadoc,如果传输发生中断,会抛出一个IOException,我们会捕获它。