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