2013-07-29 50 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