下载文件时的InputStream异常

时间:2015-01-28 16:51:05

标签: android download inputstream

我正在尝试从服务器下载PPT文件。 它在字节中。

但是在调试时我注意到输入流在运行时抛出了FileNotFound的异常..文件确实存在于服务器上,这是我的代码,非常感谢任何帮助。

public class DownloadFileAsync extends AsyncTask<String, String, String> {


@Override
protected String doInBackground(String... aurl) {
    int count;

    try {
        URL url = new URL(aurl[0]);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.addRequestProperty("Authorization", "Basic " + SharedPref.getAuthPrefValue());
        connection.addRequestProperty("Device", BaseApplication.getCurrentDevice().getDevice().toString());
        connection.addRequestProperty("DeviceId", BaseApplication.getCurrentDevice().getDeviceId());
        connection.connect();

        int lengthOfFile = connection.getContentLength();
        Log.d("ANDRO_ASYNC", "Length of file: " + lengthOfFile);

        InputStream input = new BufferedInputStream(url.openStream());
        File sdcardDest = new File(Environment.getExternalStorageDirectory(), "Availo");
        String finalDest = sdcardDest + File.separator + "Check1" + "." + "PPT";
        OutputStream output = new FileOutputStream(finalDest);

        byte data[] = new byte[1024];

        long total = 0;

        while ((count = input.read(data)) != -1) {
            total += count;
            publishProgress(""+(int)((total*100)/lengthOfFile));
            output.write(data, 0, count);
        }

        output.flush();
        output.close();
        input.close();

    } catch (Exception e) {
        e.printStackTrace();
    }


    return null;
}

我在Mac上使用Charles(类似于Windows上的小提琴手。)来查看我从服务器发送和接收的内容, 服务器不会返回任何错误,但它显示下载步骤为6-7秒,下载大约400字节然后停止。

从输入流行抛出异常。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您查看DownloadManager系统服务。它专为您要做的事情而设计:

(来自文档)

  

下载管理器是一个处理长时间运行的系统服务   HTTP下载。客户端可以请求将URI下载到a   特定目标文件。下载管理器将执行   在后台下载,负责HTTP交互和   在故障或连接更改后重试下载   系统重新启动

答案 1 :(得分:0)

虽然我同意Muzikant有关下载管理器的信息,但是  {... 1}}通常在本地设备上找不到文件时抛出...

您需要执行以下操作以确保它不会发生

FileNotFoundException