Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.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 从存储库下载tarball_Java_Download_Web Scraping_Wget_Sourceforge - Fatal编程技术网

Java 从存储库下载tarball

Java 从存储库下载tarball,java,download,web-scraping,wget,sourceforge,Java,Download,Web Scraping,Wget,Sourceforge,我目前正在从事一个从SourceForge中删除源代码的项目。 我想从代码库下载tarball 下面给出了一个链接示例: 下载时我面临的问题是,我无法使用传统的URLConnection、HttpClient、HtmlUnit、Jsoup等API下载文件。指定的链接不包含任何文件名或扩展名,这使得下载过程更加复杂 你能不能建议一种方法,在给定一组tarball链接作为参数的情况下,我应该能够将它们下载到我的磁盘上?此外,我还可以使用wget下载它。有什么方法可以在Windows中用Java编程

我目前正在从事一个从SourceForge中删除源代码的项目。 我想从代码库下载tarball

下面给出了一个链接示例:

下载时我面临的问题是,我无法使用传统的URLConnection、HttpClient、HtmlUnit、Jsoup等API下载文件。指定的链接不包含任何文件名或扩展名,这使得下载过程更加复杂


你能不能建议一种方法,在给定一组tarball链接作为参数的情况下,我应该能够将它们下载到我的磁盘上?此外,我还可以使用wget下载它。有什么方法可以在Windows中用Java编程实现吗?

在继续努力之前,请仔细阅读Sourceforge页面。如果您不理解ToS,请联系Sourceforge并询问他们是否允许您执行您的建议


我在下载时遇到的问题是,我无法使用传统的url、http、htmlunit、jsoup API等来下载文件

你的假设是错误的

您可以使用诸如标准的
HttpURLConnection
API或Apache
HttpClient
API之类的API来完成这类工作。如果它不起作用,那是因为

  • 您正在以错误的方式进行操作(例如,您没有将Java应用程序配置为使用本地HTTP代理),或者
  • Sourceforge正在使用一些技术手段阻止您这样做;见ToS
如果您在尝试这些方法时发布了一些关于发生了什么的详细信息,也许我们可以帮助您

(HtmlUnit和Jsoup可能不合适,因为它们以HTML内容为目标。)

指定的链接不包含任何文件名或扩展名,这使得下载过程更加复杂


您可以从响应标题中获取源文件名和/或内容类型。有关详细信息,请参阅HTTP规范。

在继续努力之前,请仔细阅读Sourceforge页面。如果您不理解ToS,请联系Sourceforge并询问他们是否允许您执行您的建议


我在下载时遇到的问题是,我无法使用传统的url、http、htmlunit、jsoup API等来下载文件

你的假设是错误的

您可以使用诸如标准的
HttpURLConnection
API或Apache
HttpClient
API之类的API来完成这类工作。如果它不起作用,那是因为

  • 您正在以错误的方式进行操作(例如,您没有将Java应用程序配置为使用本地HTTP代理),或者
  • Sourceforge正在使用一些技术手段阻止您这样做;见ToS
如果您在尝试这些方法时发布了一些关于发生了什么的详细信息,也许我们可以帮助您

(HtmlUnit和Jsoup可能不合适,因为它们以HTML内容为目标。)

指定的链接不包含任何文件名或扩展名,这使得下载过程更加复杂


您可以从响应标题中获取源文件名和/或内容类型。有关详细信息,请参阅HTTP规范。

如果您确实希望违反SourceForges ToS,那么这可能会有所帮助

您需要wget.exe,如您所愿

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
Process p = pb.start();
只要wget.exe与类文件位于同一目录中,这项功能就可以正常工作

您可能还需要检查文件是否存在,在这种情况下,您可以在以下行中执行操作:

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
       Process p = pb.start();
       int exitValue = p.waitFor();
       BufferedReader reader;
       // System.out.println("Exit Value" + exitValue);
       if (exitValue == 0) {
               reader = new BufferedReader(new InputStreamReader(p
                               .getInputStream()));
       } else {
               reader = new BufferedReader(new InputStreamReader(p
                               .getErrorStream()));
       }
       StringBuffer sb = new StringBuffer();
       String temp = reader.readLine();
       while (temp != null) {
               sb.append(temp);
               temp = reader.readLine();
       }

       reader.close();
       System.out.println(sb.toString());
if(sb.toString().indexOf("404") != -1) {
//means that the file does not exist
System.out.println("File does not exist, or access is denied");
} else {
if(sb.toString().indexOf("200") != -1) {
//file exists, download it
System.out.println("File exists, downloading...");
ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
    Process p = pb.start();
}
但我建议不要删除SourceForge,除非您正在删除自己的代码(我曾经作为更新程序这样做过一次)。如果你这样做了,并且我的例子有帮助,请不要提及我


希望我能帮忙

如果您确实想违反SourceForges ToS,那么这可能会有所帮助

您需要wget.exe,如您所愿

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
Process p = pb.start();
只要wget.exe与类文件位于同一目录中,这项功能就可以正常工作

您可能还需要检查文件是否存在,在这种情况下,您可以在以下行中执行操作:

ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
       Process p = pb.start();
       int exitValue = p.waitFor();
       BufferedReader reader;
       // System.out.println("Exit Value" + exitValue);
       if (exitValue == 0) {
               reader = new BufferedReader(new InputStreamReader(p
                               .getInputStream()));
       } else {
               reader = new BufferedReader(new InputStreamReader(p
                               .getErrorStream()));
       }
       StringBuffer sb = new StringBuffer();
       String temp = reader.readLine();
       while (temp != null) {
               sb.append(temp);
               temp = reader.readLine();
       }

       reader.close();
       System.out.println(sb.toString());
if(sb.toString().indexOf("404") != -1) {
//means that the file does not exist
System.out.println("File does not exist, or access is denied");
} else {
if(sb.toString().indexOf("200") != -1) {
//file exists, download it
System.out.println("File exists, downloading...");
ProcessBuilder pb = new ProcessBuilder("wget.exe","http://wurfl.cvs.sourceforge.net/viewvc/wurfl/?view=tar", "no-proxy");
    Process p = pb.start();
}
但我建议不要删除SourceForge,除非您正在删除自己的代码(我曾经作为更新程序这样做过一次)。如果你这样做了,并且我的例子有帮助,请不要提及我


希望我能帮忙

为什么不能使用标准Java库下载文件?至于文件名,只需给它一个随机名称和
.tar
扩展名。您可以使用以下内容生成一个随机文件名:
Long.toHexString(Double.doubleToLongBits(Math.random())()。另请参见这些。您能否指定无法使用“常规url、http、htmlunit、jsoup API等”下载文件的原因?共享失败的代码将帮助任何人更好地理解您的问题。顺便说一句,文件名位于响应的内容处置标题中(对于提供的链接)。您需要解析此头以获得所需的文件名(浏览器在“保存文件”对话框中也会显示该文件名)。为什么不能使用标准Java库下载该文件?至于文件名,只需给它一个随机名称和
.tar
扩展名。您可以使用以下内容生成一个随机文件名:
Long.toHexString(Double.doubleToLongBits(Math.random())()。另请参见这些。您能否指定无法使用“常规url、http、htmlunit、jsoup API等”下载文件的原因?共享失败的代码将帮助任何人更好地理解您的问题。顺便说一句,文件名位于响应的内容处置标题中(对于提供的链接)。您需要解析此标头以获得所需的文件名(浏览器在“保存文件”对话框中也会显示该文件名)。