InputstreamReader没有从URL读取所有字节数据:android?

时间:2014-10-21 11:46:33

标签: android file download inputstreamreader

当我尝试从服务器下载文件时,它错过了一些字节!并显示为已损坏的文件。在我试图从URL下载的代码下面。跑步时没有例外。我在服务中使用它。 以下是我尝试的示例结果:

文件1: 实际尺寸= 73.2 kb 已下载尺寸= 68.7 kb

文件2: 实际尺寸= 147 kb 下载大小= 137 kb

文件3: 实际尺寸= 125 kb 已下载尺寸= 116.8 kb

请帮我找到代码所需的更正。 感谢,

    InputStream stream = null;
    FileOutputStream fos = null;
    try {

        URL url = new URL(urlPath);
        stream = url.openConnection().getInputStream();
        InputStreamReader reader = new InputStreamReader(stream);
        fos = new FileOutputStream(output.getPath());
        int next = -1;
        while ((next = reader.read()) != -1) {
            fos.write(next);

        }
        // Successful finished
        Log.d("reaching", "reaching : DOWNLOAD FINISHED SUCCESSFULLY");

    } catch (Exception e) {

        e.printStackTrace();
    } finally {
        if (stream != null) {
            try {
                stream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (fos != null) {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

是的,问题在于使用InputstreamReader 我使用InputStream而不是@EJP说的那样。我修改了我的代码以从服务器下载文件

我在这里为接触此链接的人提供我的代码。对他们有帮助。

 try {

        URL url = new URL(urlPath);
        URLConnection conexion = url.openConnection();
        conexion.connect();

        int lenghtOfFile = conexion.getContentLength();
        Log.d("download", "Lenght of file: " + lenghtOfFile);

        InputStream input = new BufferedInputStream(url.openStream());
        OutputStream output = new  FileOutputStream(Environment.getExternalStorageDirectory()+"/"+fileName);

        byte data[] = new byte[1024];


        int count= -1;

            while ((count = input.read(data)) != -1) {
                output.write(data, 0, count);
            }

            output.flush();
            output.close();
            input.close();
        } catch (Exception e) {}