下载文件android的问题

时间:2014-06-12 13:01:27

标签: android

我正在尝试使用以下代码在此网址http://hitbullseye.com/includes/testmaster_pdffiles/CAT 2013.pdf上下载pdf文件:

URL url = new URL("http://hitbullseye.com/includes/testmaster_pdffiles/CAT%202013.pdf");
URLConnection ucon = url.openConnection();
ucon.setReadTimeout(40000);
ucon.setConnectTimeout(40000);
InputStream is = ucon.getInputStream();

它在InputStream中抛出FileNotFound异常is = ucon.getInputStream(); 我已经在我的清单中给了Internet许可。我也在下载其他文件,但这个没有下载。

我的Logcat:

06-12 15:59:50.091: E/Note:(28745): file url: http://hitbullseye.com/includes/testmaster_pdffiles/CAT%202013.pdf

06-12 15:59:50.251: D/libc(28745): [NET] getaddrinfo  hn 19, servname NULL, ai_family 0+

06-12 15:59:50.251: D/libc(28745): [SMD][Mode1]: Screen on and original TTL is not expired,bl_level=131

06-12 15:59:50.251: D/libc(28745): FOUND IN CACHE entry=0x52788a30

06-12 15:59:50.541: W/System.err(28745): java.io.FileNotFoundException: http://www.hitbullseye.com/includes/testmaster_pdffiles/CAT 2013.pdf

06-12 15:59:50.551: W/System.err(28745):    at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177)

我也通过以下代码编码了网址:

URI urii;
    try {
        urll = new URL(downloadUrl);
        urii = new URI(urll.getProtocol(), urll.getUserInfo(),
                urll.getHost(), urll.getPort(), urll.getPath(),
                urll.getQuery(), urll.getRef());
        urll = urii.toURL();
        downloadUrl = urll.toString();
    } catch (Exception e1) {
        e1.printStackTrace();
    }

我没有发布任何重复的问题。我已经阅读了HTTP URL Address Encoding in Java,但我想这是一个不同的问题。请帮忙!甚至DownloadManager也没有下载它,返回HTTP_DATA_ERROR。

3 个答案:

答案 0 :(得分:1)

您提供的页面似乎提供了301 - 永久移动的响应。请尝试使用HttpURLConnection。

HttpURLConnection ucon = url.openConnection();

另外,请尝试使用setInstanceFollowRedirects跟随重定向,以防重定向被禁用。

ucon.setInstanceFollowRedirects(true);

答案 1 :(得分:1)

www.添加到它为我工作的链接,我计算了字节,输出正好是文件的大小。

编辑:你可以看到它对我有用

            URL url=null;
    try {
        url = new URL("http://www.hitbullseye.com/includes/
                                      testmaster_pdffiles/CAT%202013.pdf");
    } catch (MalformedURLException e2) {
        // TODO Auto-generated catch block
        e2.printStackTrace();
    }
    URLConnection ucon=null;
    try {
        ucon = url.openConnection();
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
    ucon.setReadTimeout(40000);
    ucon.setConnectTimeout(40000);
    try {


        InputStream is = ucon.getInputStream();
        DataOutputStream in2=new DataOutputStream(new FileOutputStream(new File("D:\\site\\data.pdf")));

        int count=0;
        int datar=is.read();
        while(datar!=-1){
            in2.write(datar);
            count++;
            datar=is.read();
        }
        in2.close();
        System.out.println(count);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

回答你的上一条评论:我也很感兴趣,为什么它只适用于www,我检查了whireshark,我尝试了几个链接,你在没有www的问题中给出的链接是唯一一个回复301的链接永远移动,可能是我不确定100%的问题。我进一步观察,在301响应之后,url在空间之后被切断了

答案 2 :(得分:0)

首先尝试对url进行编码(是的,使用空格)。

URL url = new URL(URLEncoder.encode("http://hitbullseye.com/includes/testmaster_pdffiles/CAT 2013.pdf", "UTF-8"));

当然要检查MalformedURLException

try {
   URL url = ....
} catch (MalformedURLException e) {
   e.printStackTrace();
}

如果您的设备/测试设备上的网络允许您使用androids默认浏览器访问该文件,则仍然无法访问它。也许它是防火墙和/或dns不匹配。