我需要从该网页使用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的解决方案不包含此空间,这可能是它起作用的原因。

10-02 21:26