Android 下载文件时发生IOException

Android 下载文件时发生IOException,android,Android,以下是我下载文件的简单代码: InputStream input = null; OutputStream output = null; try { URL fileURL = new URL(f.getVideoURL()); URLConnection con = fileURL.openConnection(); lengthOfContent = con.getContentLengt

以下是我下载文件的简单代码:

InputStream input = null;
        OutputStream output = null;
        try {
            URL fileURL = new URL(f.getVideoURL());
            URLConnection con = fileURL.openConnection();
            lengthOfContent = con.getContentLength();
            con.setConnectTimeout(10 * 1000);
            con.connect();

            input = new BufferedInputStream(fileURL.openStream());
            File f = new File("/sdcard/",fileName);
            if(!f.exists()){
                f.createNewFile();
            }else{
                f.delete();
                f.createNewFile();
            }
            output = new FileOutputStream(f);

            Log.v("FILE", fileName);

            byte[] data = new byte[2 * 1024];
            long tempBytesWritten = 0;


            while((tempBytesWritten=input.read(data))!=-1){
                bytesWritten.addAndGet(tempBytesWritten);
                output.write(data,0,(int)tempBytesWritten);
                synchronized(h){
                    h.post(new Runnable(){
                        @Override
                        public void run() {
                            adapter.notifyDataSetChanged();
                        }
                    });
                }
                output.flush();
                output.close();
                input.close();
            }  
虽然我使用
con.connect()
进行连接,但它表示BufferedInputStream未打开。
我如何确保它是打开的

08-06 19:45:12.070: W/System.err(9244): java.io.IOException: BufferedInputStream is closed
08-06 19:45:12.070: W/System.err(9244):     at java.io.BufferedInputStream.streamClosed(BufferedInputStream.java:118)
08-06 19:45:12.075: W/System.err(9244):     at java.io.BufferedInputStream.read(BufferedInputStream.java:271)
08-06 19:45:12.075: W/System.err(9244):     at java.io.InputStream.read(InputStream.java:163)
08-06 19:45:12.075: W/System.err(9244):     at com.example.tqafragments.Task.run(Task.java:67)
08-06 19:45:12.080: W/System.err(9244):     at java.lang.Thread.run(Thread.java:856)
什么是con

你试过这样打开小溪吗

//remove con.connect();
input = new BufferedInputStream(con.getInputStream());

如果我没有错,您可以将
input.close()
放在while…

的内容长度之前设置con.doInput(true)。这将创建输入流。您是否添加了将外部存储写入AndroidManifest.xml的权限?@RaphaelAyres尝试过。Same@RaphaelAyres耶!!修好了!!你可以做的另一件事是提高它的性能,而不是使用分块读取流。如下所示:byte[]buffer=新字节[CHUNK_SIZE];int bytesRead=buf.read(缓冲区,0,块大小);将chunksize设置为10*1024或根据您的意愿进行调整以获得更好的性能。哦,对不起。它们位于
finally
块中。错把它们移到那边去了。问题仍然存在:)我认为这也很奇怪:数据输入流是从
UrlConnection
HttpURLConnection
获取的,而不是
fileURL
;)有机会说con.*,而不是fileurl.*我刚刚修正了答案