0

我需要一些帮助来完成 Java 应用程序中的功能。

此函数用于下载文件,这些文件列在位于下载基础 URL 根目录的 xml 文件中。它将文件 etags 与已下载的文件 etags 进行比较,并进行更新。但是过时的文件仍在本地文件夹中,这会产生冲突问题。

这是代码:

    private Set<Downloadable> getInternetFiles(Proxy proxy, File baseDirectory) {
    Set<Downloadable> result = new HashSet<Downloadable>();
    try
    {
        URL resourceUrl = new URL(UrlClass.DOWNLOAD_URL);
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
        DocumentBuilder db = dbf.newDocumentBuilder();
        Document doc = db.parse(resourceUrl.openStream());
        NodeList nodeLst = doc.getElementsByTagName("Contents");

        long start = System.nanoTime();
        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();
                String etag = element.getElementsByTagName("ETag") != null ? element.getElementsByTagName("ETag").item(0).getChildNodes().item(0).getNodeValue() : "-";
                long size = Long.parseLong(element.getElementsByTagName("Size").item(0).getChildNodes().item(0).getNodeValue());

                if (size > 0L) {
                    File file = new File(baseDirectory, "/" + key);
                    if (etag.length() > 1) {
                        etag = Downloadable.getEtag(etag);
                        if ((file.isFile()) && (file.length() == size)) {
                            String localMd5 = Downloadable.getMD5(file);
                            if (localMd5.equals(etag)) continue;
                        }
                    }
                    Downloadable downloadable = new Downloadable(proxy, new URL(UrlClass.DOWNLOAD_URL + key), file, false);
                    downloadable.setExpectedSize(size);
                    result.add(downloadable);
                }
            }
        }
        long end = System.nanoTime();
        long delta = end - start;
        Launcher.getInstance().println("Time to compare : " + delta / 1000000L + " ms ");
    } catch (Exception ex) {
        Launcher.getInstance().println("Couldn't download files", ex);
    }

    return result;
}

我真的需要它来继续我的项目,但不知道如何实现删除方法。谢谢。

4

0 回答 0