ANDROID:如何将video文件下载到SD卡?

我在.MP4格式的网站上有一个video文件,我想让用户能够通过单击链接将video下载到他们的SD卡。 是否有捷径可寻。 我目前有这个代码,但它不工作…不知道我在做什么错。 谢谢你的帮助!

import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import org.apache.http.util.ByteArrayBuffer; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class VideoManager extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);} private final String PATH = "/sdcard/download/"; //put the downloaded file here public void DownloadFromUrl(String VideoURL, String fileName) { //this is the downloader method try { URL url = new URL("http://www.ericmoyer.com/episode1.mp4"); //you can write here any link File file = new File(fileName); long startTime = System.currentTimeMillis(); Log.d("VideoManager", "download begining"); Log.d("VideoManager", "download url:" + url); Log.d("VideoManager", "downloaded file name:" + fileName); /* Open a connection to that URL. */ URLConnection ucon = url.openConnection(); /* * Define InputStreams to read from the URLConnection. */ InputStream is = ucon.getInputStream(); BufferedInputStream bis = new BufferedInputStream(is); /* * Read bytes to the Buffer until there is nothing more to read(-1). */ ByteArrayBuffer baf = new ByteArrayBuffer(50); int current = 0; while ((current = bis.read()) != -1) { baf.append((byte) current); } /* Convert the Bytes read to a String. */ FileOutputStream fos = new FileOutputStream(PATH+file); fos.write(baf.toByteArray()); fos.close(); Log.d("VideoManager", "download ready in" + ((System.currentTimeMillis() - startTime) / 1000) + " sec"); } catch (IOException e) { Log.d("VideoManager", "Error: " + e); } } } 

Solutions Collecting From Web of "ANDROID:如何将video文件下载到SD卡?"

内存不足? 我想象一个video文件是非常大的 – 你写入文件之前缓冲。

我知道你的例子代码是遍布互联网 – 但它下载不好! 用这个:

 private final int TIMEOUT_CONNECTION = 5000;//5sec private final int TIMEOUT_SOCKET = 30000;//30sec URL url = new URL(imageURL); long startTime = System.currentTimeMillis(); Log.i(TAG, "image download beginning: "+imageURL); //Open a connection to that URL. URLConnection ucon = url.openConnection(); //this timeout affects how long it takes for the app to realize there's a connection problem ucon.setReadTimeout(TIMEOUT_CONNECTION); ucon.setConnectTimeout(TIMEOUT_SOCKET); //Define InputStreams to read from the URLConnection. // uses 3KB download buffer InputStream is = ucon.getInputStream(); BufferedInputStream inStream = new BufferedInputStream(is, 1024 * 5); FileOutputStream outStream = new FileOutputStream(file); byte[] buff = new byte[5 * 1024]; //Read bytes (and store them) until there is nothing more to read(-1) int len; while ((len = inStream.read(buff)) != -1) { outStream.write(buff,0,len); } //clean up outStream.flush(); outStream.close(); inStream.close(); Log.i(TAG, "download completed in " + ((System.currentTimeMillis() - startTime) / 1000) + " sec");5 

切勿硬连线,特别是外部存储。 您的path在许多设备上是错误的。 使用Environment.getExternalStoragePath()获取外部存储的根目录( 可能/sdcard/mnt/sdcard或其他)。

请确保使用从Environment.getExternalStoragePath()返回的File对象创build子目录。

最后,不要只说“但它不工作”。 我们不知道你的情况是什么“但它不工作”的意思。 没有这些信息,帮助你是非常困难的。