Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过java递归下载远程HTTP目录_Java_Http - Fatal编程技术网

通过java递归下载远程HTTP目录

通过java递归下载远程HTTP目录,java,http,Java,Http,我想创建一个函数来下载远程目录(例如:)https://server.net/production/current/“)通过HTTP发送到本地文件夹。我无法控制远程目录,因此无法创建一个方便的tar球。我能够找到许多与检索单个文件相关的问题,但我找不到一个与我的用例相匹配的问题 为了让您了解我指的是什么,下面是一个在浏览器中目录的示例 换句话说,我想创建一个与此wget等效的函数,其中Y是本地目标文件夹,X是要检索的远程目录。我会直接调用wget,但我想要一个跨平台的解决方案,它可以在wind

我想创建一个函数来下载远程目录(例如:
)https://server.net/production/current/“
)通过HTTP发送到本地文件夹。我无法控制远程目录,因此无法创建一个方便的tar球。我能够找到许多与检索单个文件相关的问题,但我找不到一个与我的用例相匹配的问题

为了让您了解我指的是什么,下面是一个在浏览器中目录的示例

换句话说,我想创建一个与此
wget
等效的函数,其中
Y
是本地目标文件夹,
X
是要检索的远程目录。我会直接调用
wget
,但我想要一个跨平台的解决方案,它可以在windows上运行,而无需额外设置

wget-r-np-r“index.html*”-pyx
最终目标是一个如下所示的java函数

/**
*递归地将远程HTTPS目录中的所有文件下载到本地目标
*文件夹。
*@param remoteFolder a文件夹URL(例如:https://server.net/production/current/")
*@param destination a本地文件夹(例如:“C:\Users\Home\project\production”)
*/
publicstaticvoiddownloaddirectory(stringremotefolder,stringdestination){}

它可以假定远程目录中没有循环依赖项,并且目标文件夹存在且为空。我希望java.io或Apache
commons io中有一些神奇的功能或最佳实践可以做到这一点,但是,由于它听起来似乎不存在,我编写了自己的版本,手动浏览html页面并跟踪链接

我将把这个答案留在这里,以防其他人有同样的问题,或者有人知道如何改进我的版本

import org.apache.commons.io.FileUtils;
私有静态最终模式HREF\u Pattern=Pattern.compile(“HREF=\”(.*?\”);
/**
*递归地将远程HTTPS目录中的所有文件下载到本地
*目标文件夹。此实现要求目标字符串
*以文件分隔符结尾。如果您不知道是否有,请在末尾附加“/”
*为了安全起见。
* 
*@param src远程文件夹URL(例如:https://server.net/production/current/")
*@param dst要复制到的本地文件夹(例如:“C:\Users\Home\project\production\”)
*/
publicstaticvoiddownloaddirectory(stringsrc,stringdst)抛出IOException{
Scanner out=new Scanner(新URL(src).openStream(),“UTF-8”).useDelimiter(“\n”);
List hrefs=新的ArrayList(8);
while(out.hasNext()){
Matcher match=HREF_PATTERN.Matcher(out.next());
if(match.find())
hrefs.add(match.group(1));
}
out.close();
for(字符串下一步:hrefs){
if(next.equals(“../”)
继续;
如果(下一个.endsWith(“/”)
copyURLToDirectory(src+next,dst+next);
其他的
copyURLToFile(新URL(src+next)、新文件(dst+next));
}
}

您需要显示实际的代码,但我不确定如何解决这个问题。我可以手动解析链接的html页面并递归调用函数,但似乎有更好的解决方案我还没有遇到。没有。卷起袖子,还有什么解决办法?您需要的信息驻留在html中。您需要以某种方式解析它。你还可以通过其他方式获得文件和文件夹的名称?你想做的就是“刮取”。关于如何使用各种技术堆栈,有很多信息。例如,见