Java 从存储库下载tarball
我目前正在从事一个从SourceForge中删除源代码的项目。 我想从代码库下载tarball 下面给出了一个链接示例: 下载时我面临的问题是,我无法使用传统的URLConnection、HttpClient、HtmlUnit、Jsoup等API下载文件。指定的链接不包含任何文件名或扩展名,这使得下载过程更加复杂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编程
你能不能建议一种方法,在给定一组tarball链接作为参数的情况下,我应该能够将它们下载到我的磁盘上?此外,我还可以使用wget下载它。有什么方法可以在Windows中用Java编程实现吗?在继续努力之前,请仔细阅读Sourceforge页面。如果您不理解ToS,请联系Sourceforge并询问他们是否允许您执行您的建议
我在下载时遇到的问题是,我无法使用传统的url、http、htmlunit、jsoup API等来下载文件 你的假设是错误的 您可以使用诸如标准的
HttpURLConnection
API或ApacheHttpClient
API之类的API来完成这类工作。如果它不起作用,那是因为
- 您正在以错误的方式进行操作(例如,您没有将Java应用程序配置为使用本地HTTP代理),或者
- Sourceforge正在使用一些技术手段阻止您这样做;见ToS
您可以从响应标题中获取源文件名和/或内容类型。有关详细信息,请参阅HTTP规范。在继续努力之前,请仔细阅读Sourceforge页面。如果您不理解ToS,请联系Sourceforge并询问他们是否允许您执行您的建议
我在下载时遇到的问题是,我无法使用传统的url、http、htmlunit、jsoup API等来下载文件 你的假设是错误的 您可以使用诸如标准的
HttpURLConnection
API或ApacheHttpClient
API之类的API来完成这类工作。如果它不起作用,那是因为
- 您正在以错误的方式进行操作(例如,您没有将Java应用程序配置为使用本地HTTP代理),或者
- Sourceforge正在使用一些技术手段阻止您这样做;见ToS
您可以从响应标题中获取源文件名和/或内容类型。有关详细信息,请参阅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等”下载文件的原因?共享失败的代码将帮助任何人更好地理解您的问题。顺便说一句,文件名位于响应的内容处置标题中(对于提供的链接)。您需要解析此标头以获得所需的文件名(浏览器在“保存文件”对话框中也会显示该文件名)。