Java 如何检查下载过程是否完成

Java 如何检查下载过程是否完成,java,apache-commons-io,Java,Apache Commons Io,我的应用程序将从我的web服务器解析一个XML文件,然后下载这些文件。我的应用程序将从XML文件中获取“URL”的内容,并使用公共IO的FileUtils下载它。我的问题是,我如何知道我的下载过程是否完成了。在我的XML文件中有很多“URL” 以下是我代码的一部分: private Proxy proxy = Proxy.NO_PROXY; public void downloadLibrary() { System.out.println("St

我的应用程序将从我的web服务器解析一个XML文件,然后下载这些文件。我的应用程序将从XML文件中获取“URL”的内容,并使用公共IO的FileUtils下载它。我的问题是,我如何知道我的下载过程是否完成了。在我的XML文件中有很多“URL”

以下是我代码的一部分:

private Proxy proxy = Proxy.NO_PROXY;
    public void downloadLibrary()
        {
            System.out.println("Start downloading libraries from server...");
            try
            {
                URL resourceUrl = new URL("http://www.example.com/libraries.xml");
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                Document doc = db.parse(resourceUrl.openConnection(proxy).getInputStream());
                NodeList nodeLst = doc.getElementsByTagName("Contents");
                for (int i = 0; i < nodeLst.getLength(); i++)
                {
                    Node node = nodeLst.item(i);

                    if (node.getNodeType() == 1)
                    {
                        Element element = (Element)node;
                        String key = element.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue();
                        File f = new File(launcher.getWorkingDirectory(), key);
                        downloadFile("http://www.example.com/" + key, f, "libraries");
                    }
                }
            }
            catch(Exception e)
            {
                System.out.println("Error was found when trying to download libraries file " + e);
            }

        }

        public void downloadFile(final String url, final File path, final String fileName)
        {
            SwingWorker<Void, Void> worker = new SwingWorker<Void, Void>()
            {
                @Override
                protected Void doInBackground() throws Exception
                {
                    launcher.println("Downloading file " + fileName + "...");
                    try
                    {
                        URL fileURL = new URL(url);
                        ReadableByteChannel rbc = Channels.newChannel(fileURL.openStream());
                        FileOutputStream fos = new FileOutputStream(path);
                        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
                    }
                    catch(Exception e)
                    {
                        System.out.println("Cannot download file : " + fileName + " " + e);
                    }
                    return null;
                }
                @Override
                public void done()
                {
                    System.out.println(fileName + " had downloaded sucessfully");

                }
            };
            worker.execute();
        }
private Proxy=Proxy.NO\u Proxy;
公共void下载库()
{
System.out.println(“开始从服务器下载库…”);
尝试
{
URL resourceUrl=新URL(“http://www.example.com/libraries.xml");
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
Document doc=db.parse(resourceUrl.openConnection(proxy.getInputStream());
NodeList nodeLst=doc.getElementsByTagName(“内容”);
对于(int i=0;i
如果您发送的每个下载都带有一个线程(我推荐),那么您有几种可能性

使用
Future
FutureTask
等待所有线程完成


使用
thread.join()
等待线程停止。

请在问题中包含您尝试过的代码。我讨厌懒惰的人:S@RaminBoza哈哈哈,你就是那个懒惰的人。您不想发布示例代码。但没关系,我会亲自尝试:)我是懒惰的吗?我手头没有示例代码来发布它,我会像你一样,用谷歌搜索它。所以现在这不关我的事,你的谷歌搜索和我的一样好。