我需要从该网页使用Java下载文件
http://www.okaa.gr/files/1/%CE%9F%CE%9A%CE%91%CE%91/%CE%A4%CE%99%CE%9C%CE%95%CE%A3 %CE%A7%CE%9F%CE%9D%CE%94%CE%A1%CE%99%CE%9A%CE%97%CE%A3/20150409-pasxa.pdf
那里的文字是希腊字母。
如果您在浏览器上使用此URL,它可以正常工作,并打开pdf文件。在Java中使用它,我得到一个400错误。
我使用了很多不同的方法来实现我想要的功能,但是它们都得到相同的错误。
这确实适用于其他站点和其他文件
String okaa="http://www.okaa.gr/";
String link="gr/nea-kai-anakoinoseis/statistika-deltia-timon/?date=09&month=4&year=2015&catname=0";
URL okaaLink = new URL(okaa+link);
BufferedReader in = new BufferedReader(
new InputStreamReader(okaaLink.openStream()));
ArrayList<String> links =new ArrayList<String>();
String inputLine;
while ((inputLine = in.readLine()) != null)
{
if(inputLine.contains(".pdf"))
{
String newLink=inputLine.substring(inputLine.indexOf("href")+6,inputLine.indexOf("download")-2);
links.add(okaa+newLink);
}
}
in.close();
ArrayList<String> links =new ArrayList<String>();
links.add(url); //the url in question
for (int i=0;i<links.size();i++)
{
// download and save the file
URL website = new URL(links.get(i));//the url link
ReadableByteChannel rbc = Channels.newChannel(website.openStream());
FileOutputStream fos = new FileOutputStream(i+".pdf");
fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
fos.close();
}
有什么帮助吗?
编辑:
更新的代码。我首先从主页中读取了链接列表,剥离了html部分(substring命令),并将其传递给ArrayList。
然后使用数组列表上的网址我要下载文件
但这即使我从浏览器复制URL并将其直接粘贴到命令
URL website = new URL("....");
中也不起作用解决了:
感谢@Yannick,我要做的就是使用
newLink=newLink.replaceAll("\\s","");
删除空格我永远都不会想出来!
最佳答案
也许问题是链接在以下位置包含空格
...%A3%CE ...
您的浏览器会自动将“”替换为“”,因为带空格的链接无效。
newuserua_ext的解决方案不包含此空间,这可能是它起作用的原因。