2013-07-29 32 views
1

本质上,我将一个相对较小的.exe文件拖到本地存储的文件夹中。理想情况下,我想要做的是在文件完成下载时找到,以便我可以执行一些功能,然后转到下一个文件。在Java中检查完整的文件下载

下面是部分代码:

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 
+0

fos.getChannel()。transferFrom(红细胞,0,Long.MAX_VALUE)并不在一个单独的线程中执行,因此它不应该继续下去,直到trasferFrom()完成后,对不对?你测试过了吗? – JBuenoJr

+0

我刚刚测试了几分钟,并且您是正确的。我会编辑这个问题来删除这一点,但是需要检查它是否仍然存在。 – JTApps

回答

1

你能做到这一点。使它成为一种方法,如果成功完成,则返回true,否则返回false。它不会返回,直到它完成。您传入文件名以保存和下载网址。

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; 
} 
+0

我有一些非常好的成功,它应该涵盖所有我想要的目的。只是好奇,是否可以验证文件大小或这种性质的东西,以确保文件完全下载后该方法返回?这可能是不必要的,但我有点好奇。 – JTApps

+0

根据javadoc的说法,如果发生中断传输的事情,就会抛出一个IOException,我们确实会发现它。 – JBuenoJr